Вопрос многие ко многим в Учении 2 - PullRequest
6 голосов
/ 30 марта 2012

Я пытаюсь выяснить, как выполнить запрос «многие ко многим» в Doctrine 2, и я не могу найти ответ.Я точно знаю, как бы я делал это в прямом SQL:

      SELECT ma.id,
             ma.name
        FROM user u
        JOIN user_media_area uma ON uma.user_id = u.id
        JOIN media_area ma ON uma.media_area_id = ma.id

Как бы я сделал то же самое с Doctrine?

Ответы [ 2 ]

5 голосов
/ 31 марта 2012

В руководстве есть несколько хороших примеров: http://docs.doctrine -project.org / projects / doctrine-orm / ru / 2.1 / reference / query-builder.html

В вашем случаеэто выглядело бы примерно так:

    // Build query
    $em = $this->getEntityManager();
    $qb = $em->createQueryBuilder();

    $qb->addSelect('user');
    $qb->addSelect('mediaArea');

    $qb->from('SomeBundle:User','user');

    $qb->leftJoin('user.userMediaArea','userMediaArea');
    $qb->leftJoin('userMediaArea.mediaArea','mediaArea');

    $query = $qb->getQuery();
    $users = $query->getResult();
    echo $users[0]->getUserMediaArea()->getName();

Вы не опубликовали свой код сущности, поэтому мне пришлось немного угадать, как вы определили отношения.Если у вас есть простая ManyToMany между пользователем и MediaArea, вы можете пропустить присоединение UserMediaArea.D2 это выяснит.А поскольку вы действительно хотите только информацию MediaArea, я бы на самом деле отменил запрос и сделал бы выбор из MediaArea, чтобы не нужно было возвращать информацию о пользователе.Но я пытался следовать вашему первоначальному запросу.

0 голосов
/ 30 марта 2012
SELECT ma.id, ma.name
FROM User u 
JOIN u.media

Пользователь - объект «Пользователь», а u.media - объект «Медиа».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...