Доктрина 2 Ограничение ассоциаций с DQL - PullRequest
1 голос
/ 23 ноября 2011

Кажется, в Doctrine 2.1 есть упущение, когда возвращать подмножество нелегко Коллекция для ассоциации.

http://www.doctrine -project.org / документы / ОРМ / 2,1 / а / ссылки / ограничение, и известное-issues.html # restricing-ассоциация

Документы рекомендуют написать метод поиска репозитория, который имеет смысл, потому что это было первое, что я хотел сделать.

Однако, не имея ссылки на 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 Ответ

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

Что бы я сделал:

class Category
{
    protected $id;
    protected $articles; // PesistentCollection

    public function getVisableArticles(IArticleRepository $articleRepository)
    {
        return $articleRepository->getVisibleByCategory($this);
    }
}

interface IArticleRepository
{
    function getVisibleByCategory(Category $category);
}

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

...