Symfony2 и Doctrine: отношение «многие ко многим», использующее построитель запросов

У меня есть 2 объекта: пользователь и архив. Пользовательский объект имеет, помимо прочего, два свойства:

/** * @ORM\OneToMany(targetEntity="My\ApplicationBundle\Entity\Archive", mappedBy="user") **/ protected $archives; /** * @ORM\ManyToMany(targetEntity="My\ApplicationBundle\Entity\Archive", inversedBy="users") * @ORM\JoinTable(name="collection") **/ private $collection; 

и объект Archive:

 /** * @ORM\ManyToOne(targetEntity="My\UserBundle\Entity\User", inversedBy="archives") * @ORM\JoinColumn(name="user_id", referencedColumnName="id") **/ protected $user; /** * @ORM\ManyToMany(targetEntity="My\UserBundle\Entity\User", mappedBy="collection") **/ private $users; 

причина этого небольшого беспорядка довольно проста: в User, $ archives представлены все архивы, представленные пользователем, $ collection представляет все архивы, используемые пользователем (даже представленные другими пользователями). В объекте Archive, $ user представляет пользователя, представившего этот архив, $ users представляют всех пользователей, использующих этот архив.

Итак, чтобы получить архивы одного пользователя, я просто использую:

 $this->getUser()->getArchives(); 

и получить коллекцию:

 $this->getUser()->getCollection(); 

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

 $repository = $this->getDoctrine() ->getRepository('MyApplicationBundle:Archive'); $query = $repository->createQueryBuilder('a') ->innerJoin('a.user', 'u', 'WITH', 'u = :user') ->where('a.active = :active') ->setParameters(array( 'user' => $this->getUser(), 'active' => 1 )) ->setFirstResult($start) ->setMaxResults($length) ->getQuery() ->getResult(); 

но здесь проблема заключается в том, что я перехожу непосредственно в архив без использования таблицы сбора (для этого нет сущности). Может кто-нибудь, пожалуйста, объясните мне, как горячо рассматривать таблицу сбора, чтобы отфильтровать мои результаты?

Большое спасибо Мануэль


РЕШИТЬ

благодаря LPodolski, вот как я изменил DQB

 $query = $repository->createQueryBuilder('a') //->innerJoin('a.user', 'u', 'WITH', 'u = :user') ->innerJoin('a.users', 'cu', 'WITH', 'cu = :user') ->where('a.active = :active') ->setParameters(array( 'user' => $this->getUser(), 'active' => 1 )) ->setFirstResult($start) ->setMaxResults($length) ->getQuery() ; 

Related of "Symfony2 и Doctrine: отношение «многие ко многим», использующее построитель запросов"