我有以下工作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),当我显示问题列表时,我要么从该问题得到最后答案(保存时需要更新),或者没有,我必须创建它(保存时插入)。问题也属于多种类型之一(表BogenTyp),并且属于众多组中的一个(表BogenFragenGruppe)
任何想法?
答案 0 :(得分:4)
$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语句的编号)