我有一个相同类的 Active Record 对象数组。该对象具有定义的关系。初始化“父”对象后,有没有办法以“批量”方式读取相关对象?
示例我定义了 AR 类Post、User、Comment * Post * 有关系所有者(BELONGS_TO) 到类User和关系评论(HAS_MANY) 到类Comments
我有一个$posts类对象的数组Post。由于不同的原因,$posts不能从一开始就初始化
'with' => array('owner', 'comments')
如果我这样做:
foreach ($posts as $post) {
var_dump($post->owner);
var_dump($post->comments);
}
对于每一个$post ,都应该为 retriving owner和 retriving comments进行查询。这可能导致大量查询和脚本执行缓慢。更好的方法是一步读取一种类型的所有相关对象。
是否存在这样的东西来检索对象数组的某个关系的所有相关对象?:
Post::readRelatedObject($posts, 'owner');
Post::readRelatedObject($posts, 'comments');
我需要这种方法有几个原因:
- 有时我无法提前知道是否需要初始化关系。
- 在“父母”之后读取相关对象可能会快得多,因为连接可能很慢。
- 缓存可能会受到影响,因为有时“父”对象不能与相关对象具有相同的缓存时间,因此在从缓存中提取父对象之后以分组/批量方式读取相关对象可能很有用。例如:$post已缓存,但我无法将最后 3 条评论与帖子一起缓存。
yii 是否包含这样的内容?或者可以提供帮助的插件?
谢谢