簡體   English   中英

一對多關系的學說查詢

[英]doctrine query for chained one-to-many relationships

我有三個表A,B,C。A和B具有一對多關系。 B和C具有另一對多關系。 換句話說,每個A可以具有多個B,而每個B可以具有多個C。

現在,我想查詢給定記錄A,以獲取所有具有相關C的相關B。 換句話說,對於給定的a(表A中的一條記錄),我想從表B中獲取所有相關的B,條件是每個B在表C中的相關C也都大於零。

如何用PHP原則編寫語句? 我有一些無效的代碼:

Doctrine_Query :: create()-> from('B b')-> leftJoin('C c')-> andWhere('b.A_id =?',a.id)-> andWhere('c.b_id = b 。ID');

從我與Doctrine的合作中,這是不可能的(我要說的是Doctrine 1)。

我知道很糟糕的解決方法是執行多個查詢。 IE會獲取所有B ID,並在whereIN子句中使用它們,並在單獨的查詢中將它們拉起。 如果其他人有更好的方法,我會對它感興趣:)

如前所述,您至少需要編寫2個查詢。 我也將按照他的建議進行操作(獲取所有B ID並使用IN)。

要使其更符合教義,請查看DQL子查詢 他們已經顯示了一個使用IN與選擇ID結合使用的示例。

編輯 :閱讀DuoSRX的答案,我想您可能是說他用內聯接顯示的內容,但是不確定我是否理解正確的問題。

您為什么不只使用innerJoin?

使用Foo,Bar和Baz(分別是A,B和C):

Doctrine_Query::create()
->from('Bar bar')
->where('bar.foo_id = ?', $foo->id)
->innerJoin('bar.Baz baz');

這樣,您將只獲得屬於Foo且具有一個或多個Baz的Bar。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM