Doctrine 2限制与DQL的关联

时间:2011-11-23 10:07:13

标签: php doctrine-orm repository-pattern dql

在Doctrine 2.1中似乎有一种观点,即返回子集并不容易 协会的集合。

http://www.doctrine-project.org/docs/orm/2.1/en/reference/limitations-and-known-issues.html#restricing-associations

文档建议编写一个存储库查找方法,这是有道理的,因为这是我做的第一件事。

然而,如果没有在实体中引用EntityManager,我就看不到你将如何检索关联的存储库,这似乎打败了将域与数据库分离的观点?

这个问题是否有推荐的策略?

以下是我对他们建议的解决方案的解释。

class Category
{
    protected $id;
    protected $articles; // PesistentCollection
    protected $em; // The EntityManager from somewhere?

    public function getVisableArticles()
    {
        return $this->em->getRepository('Article')
                    ->getVisibleByCategory($this);
    }
}

1 个答案:

答案 0 :(得分:1)

  1. 在实体中拥有实体管理员在任何情况下都不是一件好事 (注入您的存储库)
  2. 类别不是文章的唯一根,因为它无法满足您需要的文章,因此您需要一个文章存储库。
  3. 我会做什么:

    class Category
    {
        protected $id;
        protected $articles; // PesistentCollection
    
        public function getVisableArticles(IArticleRepository $articleRepository)
        {
            return $articleRepository->getVisibleByCategory($this);
        }
    }
    
    interface IArticleRepository
    {
        function getVisibleByCategory(Category $category);
    }
    

    您的学说库将实现IArticleRepository,并且该类不会对您的数据存储/学说有任何了解。