2012-11-14 64 views
3

我有以下工作MySQL查询:在Doctrine2右键加入了Symfony2的

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)

任何想法?

回答

3

好的,再次发现我自己。 Doctrine2的QueryBuilder支持左连接(如果切换两个表,则与右连接相同)。对于那些需要一些代码,这里是上面的SQL语句建立与QueryBuilder的:

$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语句的数量)

+7

这将是如果表和字段名都是正确的英文,其他人更容易阅读你的代码 – tom10271