Esempio n. 1
0
 /**
  * Constructor.
  *
  * @param AssociationDefinition $association   Definition association
  * @param ClassMetadata         $metadata      Class metadata of association model
  * @param mixed                 $coll          Model instance or ArrayCollection
  * @param mixed                 $identifierRef Identifier value for relation between collection and model reference
  */
 public function __construct(AssociationDefinition $association, ClassMetadata $metadata, $coll, $identifierRef)
 {
     $this->definition = $association;
     $this->metadata = $metadata;
     $this->identifierRef = $identifierRef;
     if ($association->isMany()) {
         $this->identifiers = array();
         foreach ($coll as $cc) {
             $id = $metadata->getIdentifierValue($cc);
             $this->identifiers[] = $id;
         }
     } else {
         $id = $metadata->getIdentifierValue($coll);
         $this->identifiers = array($id);
     }
 }
Esempio n. 2
0
 /**
  * Performed research on the model via their repository.
  *
  * @param ClassMetadata $class
  * @param string        $manager
  * @param array         $ids
  * @param callable      $stacker
  */
 public function loaderModels(ClassMetadata $class, $manager, array $ids, \Closure $stacker)
 {
     $classOfManagerName = $class->getFieldMapping($manager);
     $pool = $this->manager->getPool();
     $methodFind = $classOfManagerName->getRepositoryMethod();
     $repository = $pool->getManager($manager)->getRepository($classOfManagerName->getName());
     if ($methodFind && method_exists($repository, $methodFind)) {
         foreach ($repository->{$methodFind}($ids) as $object) {
             $id = $class->getIdentifierValue($object);
             $stacker($id, $object);
         }
     } else {
         trigger_error(sprintf('findOneBy in ModelPersister::loadAll context is depreciate. Define repository-method for "%s" manager model, see mapping for "%s".', $manager, $class->getName()), E_USER_DEPRECATED);
         $repository = $pool->getManager($manager)->getRepository($classOfManagerName->getName());
         $field = $class->getIdentifierReference($manager)->field;
         foreach ($ids as $id) {
             $object = $repository->findOneBy(array($field => $id));
             if (!$object) {
                 continue;
             }
             $id = $class->getIdentifierValue($object, $manager);
             $stacker($id, $object);
         }
     }
 }