学说2 - 使用存储库

时间:2014-02-20 12:03:20

标签: doctrine-orm repository

我想开始使用Doctrine 2进行新项目,但我注意到该学说现在允许定义存储库:http://mackstar.com/blog/2010/10/04/using-repositories-doctrine-2

我现在不确定如何构建我的项目,因为这不是使用存储库的目的之一,您可以在需要时切换到另一个ORM。 因此,如果您使用Doctrine存储库,这种可能性就会消失。

或者我应该定义自己的存储库,并在这些存储库中使用对doctrine存储库的调用?这看起来有点奇怪......

1 个答案:

答案 0 :(得分:0)

为了跟进注释,这是我使用的基本存储库类。

namespace Cerad\Bundle\CoreBundle\Doctrine;

use Doctrine\ORM\EntityRepository as BaseRepository;

class EntityRepository extends BaseRepository implements ApplicationRepository
{
    // Create main entity
    public function createEntity($params = array())
    {
        $entityName = $this->getEntityName();
        return new $entityName($params);
    }
    // Allow null for id
    public function find($id)
    {
        return $id ? parent::find($id) : null;
    }
    /* ==========================================================
     * Persistence
     */
    public function persist($entity) { return $this->getEntityManager()->persist($entity); }
    public function remove($entity)  { return $this->getEntityManager()->remove($entity);  }
    public function flush()          { return $this->getEntityManager()->flush();          }
    public function clear()          { return $this->getEntityManager()->clear();          }
}

能够支持多种存储库类型实际上非常有用。我经常会实现InMemory存储库,这些存储库可以在yaml文件中进行初始开发和测试。