Beispiel #1
0
 /**
  * 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);
 }
Beispiel #2
0
 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());
     }
 }
Beispiel #3
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);
         }
     }
 }
Beispiel #4
0
 /**
  * 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)));
     }
 }