/** * 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); } }
/** * 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); } } }