2011-11-23 72 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的所有记录。 –