如何选择属于A组的用户?

时间:2013-06-08 14:58:42

标签: mysql symfony

如何选择属于A组的用户?

我的桌子在下面。

我的用户表。

ID | name |sex
1  | bob  |1
2  | kayo |2
3  | ken  |1

我的fos_group表

ID | name
1  | student
2  | teacher

我的fos_user_user_group

user_id | group_id
1       | 1
2       | 2
3       | 1

Bob和Ken属于group_1(学生)

Kayo属于group_2(老师)

ex)我可以像这样从用户表中选择'Bob'

$query = $em->createQuery(
    "SELECT p.name,p.sex
        FROM UserBundle:User p WHERE 
    p.id = '1' );

但我想选择属于学生组的用户(Bob和Ken)

我应该如何更改createQuery中的句子?

我猜我需要加入这些表格......


...附加

我试过像Fabio那样的回答

    $query = $em->createQuery(
    "SELECT p,p.id,p.username,p.userKey
        FROM UserBundle:User p 
        INNER JOIN fos_user_user_group b
        ON a.ID = b.user_id
        INNER JOIN fos_group c
            ON b.group_id = c.ID
        WHERE c.group_id = '1'");
    $this->data["teachers"] = $query->getResult(); 

但它说

[Semantical Error] line 0, col 94 near 'fos_user_user_group': Error: Class 'fos_user_user_group' is not defined.

我想这意味着我没有'fos_user_user_group'的实体。 我只有Group和User的实体类,其他表是自动创建的。

与此同时,我在$ formmapper的其他地方使用过这样的东西。

            ->add('teacher',
                null,
                array(
                    'query_builder' =>
                     function (\Doctrine\ORM\EntityRepository $rep) {
                     return $rep->
                    createQueryBuilder('s')
                    ->join('s.groups', 'g') 
                    ->where('g.name = :group')->setParameter('group','TeacherGroup');
                    })

            ) 

效果很好, 如何更改createQuery()的句子?

1 个答案:

答案 0 :(得分:2)

我认为您可以使用INNER JOIN查询

SELECT p.name,p.sex
FROM User p 
INNER JOIN fos_user_user_group b
ON a.ID = b.user_id
INNER JOIN fos_group c
ON b.group_id = c.ID
WHERE c.group_id = '1'