2011-11-23 91 views
1

當然,我錯過了一些東西或沒有考慮更好的方式來完成我所需要的,但這裏是我想要做的。Yii:嵌套懶惰加載與渴望加載

我有三種型號:ABCAMANY-MANY的關係爲B,稱爲relation1,而BMANY-MANY的關係爲C,稱爲relation2。我想得到所有B記錄與他們的C關係(急切加載),但僅僅從一個A實例(延遲加載,因爲我不想浪費內存加載所有relation1實例)。

所以,我想要做的應該是這樣的:

A::model()->findByPk($somePrimaryKey)->relation1->with('relation2'); 

當然是因爲使用relation1延遲加載我得到實例的數組,這不是工作,那麼我tryng到將with()方法應用於非對象。

當然,我可以做的工作有點繞通過數組迭代,但我想知道是否有一個快速和高貴的方式:)

謝謝!

回答

2

你可以試試這個:

A::model()->findByPk($somePrimaryKey)->with('relation1.relation2'); 

我找不到在任何意義上的你「不想浪費內存加載所有relation1實例」

這樣,你只是加載B型與那個特定的A模型有關。不是所有的人。

也看看Relational Query with through

+0

好的,謝謝@Asgaroth。我認爲用這種方式嵌套兩個'with',我首先加載關係1的所有記錄。 –