Doctine 2 Ограничивающие ассоциации с DQL

Кажется, что в 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); } } 

    1. Наличие entitymanager в сущности не является хорошей вещью в любом случае (вместо этого введи свой репозиторий)
    2. Категория не является единственным корнем для статей, потому что он не может использовать какие статьи вам нужны, поэтому вам нужен репозиторий для статей.

    Что я буду делать:

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

    Репозиторий вашей доктрины будет реализовывать IArticleRepository, и класс ничего не узнает о вашем хранилище / доктрине данных.