Exemple #1
0
 /**
  * Tests removing objects from the store.
  *
  * @depends testFind
  */
 public function testRemove()
 {
     $this->assertEquals(4, $this->repository->count());
     $hobbit = $this->repository->findOneByName('Merry');
     $this->repository->delete($hobbit);
     $this->assertEquals(3, $this->repository->count());
 }
Exemple #2
0
 /**
  * Do a programmatic 1:n join between the given objects and objects retrieved from the passed repository.
  *
  * Example:
  *
  *      $productRepository->joinMany($products, $tagsRepository, 'id', 'product_id', 'tags');
  *
  * The above code will query `$tagsRepository` for all tags that have `id`'s of the `$products` in `product_id`
  * property. Then it will match `$products` and the fetched tags and set all related tags on each product by
  * calling `::setTags()` with the related tags.
  *
  * @param array      $objects        Objects to which associated objects will be joined.
  * @param Repository $withRepository Repository from which associated objects should be fetched.
  * @param string     $leftProperty   Property of `$objects` under which the relation is stored.
  * @param string     $rightProperty  Property on which the fetched objects can be identified.
  * @param string     $targetProperty Property of `$objects` on which the associated object will be set. This is
  *                                   converted to a camelCase setter.
  * @param array      $criteria       [optional] Any additional criteria for finding the associated objects.
  * @param array      $params         [optional] Any additional search parameters for finding the associated objects.
  * @param boolean    $excludeEmpty   [optional] Should objects that didn't find the match be removed
  *                                   from the results set? Set as `Knit::EXCLUDE_EMPTY` constant. Default: `false`.
  *
  * @return array
  */
 public function joinMany(array $objects, Repository $withRepository, $leftProperty, $rightProperty, $targetProperty, array $criteria = [], array $params = [], $excludeEmpty = false)
 {
     // if empty collection then don't even waste time :)
     if (empty($objects)) {
         return $objects;
     }
     // select all objects for the right side of the join
     $criteria = array_merge($criteria, [$rightProperty => ObjectUtils::pluck($objects, $leftProperty)]);
     $withObjects = $withRepository->find($criteria, $params);
     $withObjects = ObjectUtils::groupBy($withObjects, $rightProperty);
     // do the programmatic join
     $getter = ObjectUtils::getter($leftProperty);
     $setter = ObjectUtils::setter($targetProperty);
     foreach ($objects as $i => $object) {
         $match = $object->{$getter}();
         if (isset($withObjects[$match])) {
             $object->{$setter}($withObjects[$match]);
         } elseif ($excludeEmpty === Knit::EXCLUDE_EMPTY) {
             unset($objects[$i]);
         }
     }
     return array_values($objects);
 }
 /**
  * Tests that an exception is thrown when the query fails.
  *
  * @depends           testInsert
  * @expectedException \Knit\Exceptions\StoreQueryErrorException
  */
 public function testRemoveError()
 {
     $this->repository->getStore()->remove($this->repository->getCollection(), new CriteriaExpression(['no_such_column' => 45]));
 }