2012-11-14 65 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