2010-08-04 110 views
2

我有三個表A,B,C,A和B有一對多的關係。 B和C有另一種一對多的關係。換句話說,每個A可以有多個B,而每個B可以有多個C。關於鏈式一對多關係的學說查詢

現在我想對A的給定記錄進行查詢,以獲得所有與相關Cs有關的相關Bs。換句話說,對於給定的a,這是表A中的記錄,我希望從表B中獲得所有相關的Bs,假設表C中的每個Bs也具有多於零的相關Cs。

如何在PHP教條中編寫聲明?我有一些不起作用的代碼:

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

回答

0

爲什麼你不使用innerJoin?

隨着富,酒吧和巴茲(分別爲A,B和C):

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

這樣你只會得到酒吧屬於富,並且具有一個或多個巴茲。

+0

它的工作原理!我嘗試過這個。 – peter 2010-08-05 15:38:52

0

從我與教義的合作​​中,這是不可能的(原則1就是我所說的)。

解決辦法,我知道很爛,是做多個查詢。 IE採取所有的B ID並在whereIN子句中使用它們,並在單獨的查詢中將它們拉起來。如果別人有更好的方法,我會對它感興趣:)

0

作爲premiso指出你需要寫至少2個查詢。我也會這樣做,他建議(採取所有的B ID和使用IN)。

爲了使它更多學說線,看看DQL Subqueries。他們已經展示了一個使用IN來選擇ID的例子。

編輯:閱讀DuoSRX的答案,我認爲你可能意味着他與內部聯接顯示的內容,但不太確定是否理解了正確的問題。