/** * Loads a list of model by a list of field criteria. * * @param array $criteria * @param array $orderBy * @param integer $limit (optional) * @param integer $offset (optional) * * @return array */ public function loadAll(array $criteria = array(), array $orderBy = null, $limit = null, $offset = null) { $pool = $this->manager->getPool(); $manager_id = $this->class->getManagerIdentifier(); $models = array(); foreach ($this->class->getFieldManagerNames() as $manager) { $models[$manager] = $this->class->getFieldMapping($manager)->getName(); } $data = $pool->getManager($manager_id)->getRepository($models[$manager_id])->findBy($criteria, $orderBy, $limit, $offset); if (empty($data)) { return array(); } $builder = new ModelBuilder($this->manager, $this->uow, $this->class); return $builder->buildAll($data, $manager_id); }
public function test__construct() { $metadata = new \Pok\PoolDBM\Mapping\ClassMetadata(__NAMESPACE__ . '\\ModelTest'); $metadata->addModel('entity', __NAMESPACE__ . '\\EntityTest', array()); $metadata->setIdentifier('entity', 'id'); $metadataFactory = $this->getMock('Pok\\PoolDBM\\Mapping\\ClassMetadataFactory', array('getMetadataFor', 'setModelManager')); $metadataFactory->expects($this->any())->method('getMetadataFor')->will($this->returnValue($metadata)); $pool = new Pool(); $pool->addManager('entity', new EntityManager()); $manager = new ModelManager($pool, $metadataFactory); $this->assertInstanceOf('Pok\\PoolDBM\\Mapping\\ClassMetadataFactory', $manager->getMetadataFactory()); $this->assertTrue($manager->getPool()->hasManager('entity')); $this->assertInstanceOf(get_class($metadata), $manager->getClassMetadata(__NAMESPACE__ . '\\ModelTest')); $this->assertTrue($manager->createQueryBuilder(__NAMESPACE__ . '\\ModelTest', 'test')); $this->assertInstanceOf('Pok\\PoolDBM\\ModelRepository', $manager->getRepository(__NAMESPACE__ . '\\ModelTest')); $this->assertTrue($manager->contains(new ModelTest())); // unitOfWork $this->assertInstanceOf('Pok\\PoolDBM\\UnitOfWork', $manager->getUnitOfWork()); $manager->persist(new ModelTest()); $manager->remove(new ModelTest()); $manager->refresh(new ModelTest()); $manager->detach(new ModelTest()); $manager->merge(new ModelTest()); $manager->flush(new ModelTest()); $manager->close(); try { $manager->flush(new ModelTest()); } catch (\RuntimeException $e) { $this->assertEquals('Model manager is closed.', $e->getMessage()); } }
/** * 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); } } }
/** * Persist a model his manager doctrine. * * @param mixed $model The model instance * @param string $managerName Manager name like "entity" or "document" manager * @param mixed $id Identifier value * * @throws \RuntimeException When the flush is thrown */ protected function saveSpecificModel($model, $managerName, $id) { $class = $this->manager->getClassMetadata(get_class($model)); $pool = $this->manager->getPool(); $modelManager = call_user_func(array($model, 'get' . ucfirst($managerName))); call_user_func(array($modelManager, 'set' . ucfirst($class->getIdentifierReference($managerName)->referenceField)), $id); try { $pool->getManager($managerName)->persist($modelManager); $pool->getManager($managerName)->flush(); } catch (\Exception $e) { throw new \RuntimeException(sprintf('Error : %s WITH Model %s and manager %s', $e->getMessage(), $managerName, get_class($modelManager))); } }