2012-01-31 162 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