我有一个相同类的活动记录对象的数组。 该对象具有已定义的关系。 在“父”对象初始化之后,有没有办法以“批量”方式读取相关对象?初始化父对象后初始化相关的对象
例 我已经定义AR类邮政,用户,注释 * 邮政 *有关系所有者(belongs_to的)到类用户和关系评论(HAS_MANY)到类评论
我有一个数组类后的对象的$帖子。 对于不同的原因,$帖子不能从一开始初始化
'with' => array('owner', 'comments')
如果我这样做:
foreach ($posts as $post) {
var_dump($post->owner);
var_dump($post->comments);
}
每$发布查询对子级的retriving 所有人提出和查询评论。 这可能会导致大量查询和脚本执行缓慢。 更好的方法是在一个步骤中读取一种类型的所有相关对象。
难道这样的事情存在retriving有一定关系的所有相关对象为对象的数组?:
Post::readRelatedObject($posts, 'owner');
Post::readRelatedObject($posts, 'comments');
我需要这个形式给出的几个原因:
- 有时我不能提前告诉我是否需要关系初始化。
- 在“父母”之后阅读相关对象可能会快得多,因为连接速度可能会很慢。
- 缓存可能会受到影响,因为有时候“父”对象不能与相关对象具有相同的缓存时间,因此,在从缓存中提取父对象后,以分组/批量方式读取相关对象可能是有用的。例如:$ post已被缓存,但我无法缓存最后3条评论和帖子。
yii是否包含这样的东西?或者可以帮助的插件?
谢谢
这是什么原因,当初始化'$ posts'数组时,你不能指定'with'? – dInGd0nG 2013-02-22 05:42:37
@ dInGd0nG我有三个主要原因: 1.性能。我有很多关系的对象。如果我使用“with”加入它们,则可能会导致查询速度很慢且很慢。 2.遗留代码。作为一个函数的结果,我有对象的父对象(在示例$ posts中)。将相关对象附加到结果上会更方便,而不是修改该函数(这可能导致破坏代码的其他部分)。 3.灵活性。我不会被迫事先考虑我需要什么样的关系,我可以轻松地(并且减少数据库压力)将关系附加到一组父对象上。 – humeniuc 2013-02-22 07:15:55