Symfony2 - 存储库中的自定义查询,用于多对多关系

时间:2013-06-30 17:57:47

标签: php mysql symfony orm doctrine-orm

我在玩家教练之间有 manyToMany 关系。每个球员都可以有很多教练,每个教练都可以有很多球员。

我想创建自定义查询以恢复与特定教练相关联的所有玩家,但我真的不知道该怎么做。

我真的需要在存储库中创建一个自定义查询,以恢复与特定教练相关联的所有玩家。

这是 OSC \ User \ Entity \ PlayerRepository

中我的存储库功能的画布
public function findPlayersOfCurrentUser($user) { //The user id is the id linked to the player
        return $this->_em->createQuery('


        ');

    }

我的多对多关系正在运作,因此我有一个表格(名为 user_player ),如下所示:

user_id     player_id
   1            1

最后,我的问题是:选择 OSCUserBundle:Player 中有$user->getId()作为教练的所有玩家的SQL查询是什么?

我知道用文字做什么(

SELECT all the players from OSCUserBundle:Player WHERE id IN (SELECT all the player_id FROM user_player WHERE user_id = $user->getId()

)但不是通过createQuery或createQueryBuilder ......

1 个答案:

答案 0 :(得分:1)

// PlayerRepository
public function findPlayersOfCurrentUser(User $coach) 
{ 
    return $this->createQueryBuilder("o")
        ->innerJoin("o.coaches", "c", "WITH", "c=:coach")
            ->setParameter("coach", $coach)
        ->getQuery()->getResult() ;

}

假设用户和教练使用别名coachesplayers(复数,因为它们应该是)相关。