我想开始使用Doctrine 2进行新项目,但我注意到该学说现在允许定义存储库:http://mackstar.com/blog/2010/10/04/using-repositories-doctrine-2
我现在不确定如何构建我的项目,因为这不是使用存储库的目的之一,您可以在需要时切换到另一个ORM。 因此,如果您使用Doctrine存储库,这种可能性就会消失。
或者我应该定义自己的存储库,并在这些存储库中使用对doctrine存储库的调用?这看起来有点奇怪......
答案 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文件中进行初始开发和测试。