2012-01-31 79 views
4

我在Symfony2中有一个表单,需要在特定的锦标赛中有一个实体选择字段,其中包含玩家集合。我创建表单Type并将联赛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; 
} 

()中的函数不存在于查询生成器中。我希望这个方法能够显示我想要做的事情。试图返回查询生成器来选择在给定锦标赛中找到的正确玩家。

我该如何做到这一点?

谢谢!

回答

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