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