我有以下工作的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表)问题(表BogenFragen表),当我显示问题列表时,我要么从该问题中得到了最后一个答案(保存时需要UPDATE),要么没有答案,所以我必须创建它(保存时插入)。问题也属于许多类型之一(表BogenTyp),也属于许多组之一(表BogenFragenGruppe)

有任何想法吗?

最佳答案

好的,我自己又发现了。 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语句的编号)

关于sql - 在Symctony2中正确加入Doctrine2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13376100/

10-12 15:36