Кажется, что в Doctrine 2.1 есть перевес, где нелегко вернуть коллекцию подмножества для ассоциации.
http://www.doctrine-project.org/docs/orm/2.1/en/reference/limitations-and-known-issues.html#restricing-associations
Документы рекомендуют написать метод поиска репозитория, что имеет смысл, потому что это было первое, что я делал.
Однако, не имея ссылки на EntityManager внутри Entity, я не вижу, как вы могли бы восстановить репозиторий ассоциации, и это, похоже, лишает точку разделения домена из базы данных?
Есть ли рекомендуемая стратегия для этой проблемы?
Вот моя интерпретация их предлагаемого решения.
class Category { protected $id; protected $articles; // PesistentCollection protected $em; // The EntityManager from somewhere? public function getVisableArticles() { return $this->em->getRepository('Article') ->getVisibleByCategory($this); } }
Что я буду делать:
class Category { protected $id; protected $articles; // PesistentCollection public function getVisableArticles(IArticleRepository $articleRepository) { return $articleRepository->getVisibleByCategory($this); } } interface IArticleRepository { function getVisibleByCategory(Category $category); }
Репозиторий вашей доктрины будет реализовывать IArticleRepository, и класс ничего не узнает о вашем хранилище / доктрине данных.