六
28
Filed under: YII
懒惰式加载(lazy loading):是指在定义好两个modle之间relations之后,只要在一个modle中没有利用relations去调用另一个modle的信息,则不会执行相应的查询。比如在author和post之间建立的一对多的关系,只要不引用post->author,YII就不会去查询post作者的详细信息。
// 获取 ID 为 10 的帖子 $post=Post::model()->findByPk(10); // 获取帖子的作者(author): 此处将执行一个关联查询。 $author=$post->author;
渴求式加载(eager loading)
渴求式加载方式会在获取主 AR 实例的同时获取关联的 AR 实例。 这是通过在使用 AR 中的 find 或 findAll 方法时配合使用 with 方法完成的。例如:
$posts=Post::model()->with('author')->findAll();
上述代码将返回一个 Post 实例的数组。与懒惰式加载方式不同,在我们访问每个 Post 实例中的 author 属性之前,它就已经被关联的 User 实例填充了。 渴求式加载通过 一个 关联查询返回所有帖子及其作者,而不是对每个帖子执行一次关联查询。
我们可以在 with() 方法中指定多个关系名字,渴求式加载将一次性全部取回他们。例如,如下代码会将帖子连同其作者和分类一并取回。
$posts=Post::model()->with('author','categories')->findAll();
Tags:



No Responses
Leave a Response