Doctrine2在Symfony2中的右连接

7

我有以下可用的MySQL查询:

SELECT *
FROM bogenantworten a
    RIGHT JOIN
        bogenfragen f ON f.id = a.bogenfragen_id
        AND a.personen_id = 3,
    BogenTyp t, 
    BogenFragenGruppe g
WHERE
    t.id = f.fragentyp_id AND
    g.id = f.fragengruppen_id AND
    t.id = 1
ORDER BY f.sortierung ASC

现在我需要在Doctrine2 DQL或QueryBuilder中实现这个功能。我已经了解到D2强制我以对象的方式思考,但我找不到任何建议如何标记我的实体使其工作。
所以我想要在我的Symfony2应用程序中使上述MySQL查询工作,或者得到一些帮助,以便正确注释我的实体,从而在BogenAntworten和BogenFragen之间建立一个工作的右连接(3和1是参数,只是让你知道)。我已经为所有实体设置了OneToMany和ManyToOne注释,但我需要一些东西来使右/左连接起作用。
如果您想帮助我设计实体:
我有回答问题(表BogenAntworten)的人(表Person),当我显示问题列表时,我要么从该问题获取最后一个答案(保存时需要更新),要么没有答案,我必须创建它(保存时插入)。问题还分为多种类型(表BogenTyp)和多个组(表BogenFragenGruppe)中。
有什么想法吗?
1个回答

4

好的,我自己找到了答案。Doctrine2的QueryBuilder支持leftJoin(如果你交换两个表,则与RIGHT JOIN相同)。以下是使用QueryBuilder构建上述SQL语句的代码:

$query = $em->createQueryBuilder()
    ->select(array('f.id', 'f.frage', 'f.sortierung', 'a.antwort', 'g.name'))
    ->from('MySuperBundle:BogenFragen', 'f')
    ->leftJoin('f.bogenantworten', 'a', 'WITH', 'a.personen = :pid')
    ->from('MySuperBundle:BogenTyp', 't')
    ->from('MySuperBundle:BogenFragenGruppe', 'g')
    ->where('t.id = :tid')
    ->andWhere('t.id = f.bogentypen')
    ->andWhere('g.id = f.bogenfragengruppe')
    ->orderBy('f.sortierung', 'ASC')
    ->setParameter('tid', 1)
    ->setParameter('pid', 3)
    ->getQuery();

这些参数实际上是动态的,但为了更容易阅读,我使用了原始SQL语句的数字。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接