Запрос на отношения «многие-ко-многим» с использованием Доктрины с Symfony2

Я triyng, чтобы понять, как многие из многих отношений работают с Doctrine и Symfony2.

Я воссоздал пример, показанный в официальной документации (goo.gl/GYcVE0), и у меня есть два класса Entity: User и Group, как вы можете видеть ниже.

<?php /** @Entity **/ class User { // ... /** * @ManyToMany(targetEntity="Group", inversedBy="users") * @JoinTable(name="users_groups") **/ private $groups; public function __construct() { $this->groups = new \Doctrine\Common\Collections\ArrayCollection(); } // ... } /** @Entity **/ class Group { // ... /** * @ManyToMany(targetEntity="User", mappedBy="groups") **/ private $users; public function __construct() { $this->users = new \Doctrine\Common\Collections\ArrayCollection(); } // ... } 

Если я обновляю свою БД, я получаю эту схему MySQL:

 CREATE TABLE User ( id INT AUTO_INCREMENT NOT NULL, PRIMARY KEY(id) ) ENGINE = InnoDB; CREATE TABLE users_groups ( user_id INT NOT NULL, group_id INT NOT NULL, PRIMARY KEY(user_id, group_id) ) ENGINE = InnoDB; CREATE TABLE Group ( id INT AUTO_INCREMENT NOT NULL, PRIMARY KEY(id) ) ENGINE = InnoDB; ALTER TABLE users_groups ADD FOREIGN KEY (user_id) REFERENCES User(id); ALTER TABLE users_groups ADD FOREIGN KEY (group_id) REFERENCES Group(id); 

Проблема в том, что в Symfony2 мне нужен Entity для генерации запроса, и в этом случае у меня нет users_group Entity, связанного с таблицей users_group потому что эта таблица создается автоматически каркасом.

Итак, как я могу получить информацию, связанную с этой таблицей отношений? Например, мне нужно получить всех пользователей в группе, которые являются пользователями, у которых есть идентификатор, который отображается в таблице users_group .

Как я могу это сделать с помощью DQL, QueryBuilder или других методов?

Большое спасибо.

Solutions Collecting From Web of "Запрос на отношения «многие-ко-многим» с использованием Доктрины с Symfony2"

Вы можете написать запрос DQL для соединения, как показано ниже.

 $em = $this->getContainer()->get('doctrine')->getManager(); $repository = $em->getRepository('YourNamespaceYourBundle:User'); $query = $repository->createQueryBuilder('u') ->innerJoin('u.groups', 'g') ->where('g.id = :group_id') ->setParameter('group_id', 5) ->getQuery()->getResult(); 

Ваше сопоставление для свойства groups объекте User будет обрабатывать часть соединения, вам не нужно упоминать таблицу переходов в вашем DQL-запросе