Doctrine Query Builder - Как выбрать отношение «многие ко многим»? - PullRequest
4 голосов
/ 31 января 2012

У меня есть форма в Symfony2, в которой необходимо заполнить поле выбора сущности с набором игроков в конкретном турнире.Я создаю форму Тип и передаю идентификатор турнира в свойство query_builder правильного поля.В хранилище сущностей у меня есть этот метод:

public function allPlayersInTournamentQuery($tournament_id)
{
    $repo = $this->getEntityManager()->getRepository('GameBundle:Tournament');
    $tournament = $repo->find($tournament_id);
    $players = $tournament->getPlayers();
    $playersIds = array();
    foreach ($players as $player) {
        $playersIds[] = $player->getId();
    }
    $playersQuery = $this->createQueryBuilder('p')
        ->in('p.id', $playersIds)
        ->orderBy('p.real_name', 'ASC');
    return $playersQuery;
}

Функция в () не существует в построителе запросов.Я надеюсь, что метод показывает, что я пытаюсь сделать.Я пытаюсь вернуть построитель запросов, который выбирает правильных игроков, найденных в данном турнире.

Как мне этого добиться?

Спасибо!

1 Ответ

3 голосов
/ 31 января 2012

Вы можете использовать вспомогательные методы, предоставляемые построителем запросов $playersQuery->expr()->in('p.id', $playersIds)

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

$playersQuery = $this->createQueryBuilder('p');
$playersQuery->where($playersQuery->expr()->in('p.id', $playersIds))
             ->orderBy('p.real_name', 'ASC');

Подробнее о вспомогательных методах здесь

...