Doctrine Query Builder - 如何选择多对多关系?

时间:2012-01-31 04:35:20

标签: doctrine symfony doctrine-orm

我在Symfony2中有一个表单需要一个实体选择字段,其中填充了特定锦标赛中的一组玩家。我创建表单类型并将锦标赛ID传递给正确字段的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 个答案:

答案 0 :(得分:3)

您可以使用查询构建器$playersQuery->expr()->in('p.id', $playersIds)

提供的帮助程序方法

您的查询将是这样的:

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

有关辅助方法here

的更多信息