3

我在玩 Yii 并且在 Yii Eager Loading延迟加载数据库查询方面遇到了一些问题。例如比较两种方式:

  1. $comment = Comment::model()->with(array('issue'=>array('condition'=>'project_ id='.$projectId)))->findAll();

  2. 2a.$comment = Comment::model()->findAll

2b。得到问题:

$issue = $comment->issues(假设我们在 Comment 模型中声明了“问题”关系)。

我不确定第一种方法有什么优点。据我了解,第一个代码将仅返回 Comment 但也运行 get Issue 查询(如 2b 代码)。但是,正如我所见(但不确定是否有更好的方法来利用“急切加载”),如果我想在第一个代码中获得评论问题,我还必须运行以下代码:

3.

$comment ->issues

如果是这样,作为我的客人,我们必须使用 Eager 加载方法运行 2 个查询,因此它比“延迟加载”需要更长的时间,因为它运行了两次“获取问题查询”(我们运行第一个代码时的第一次) ,第二次我们运行第三个代码)。

那么,您能否验证我的观点,或者如果它错了,您能否告诉我如何从利用其效率的 Eager Loading 方法中获取所有问题。

4

1 回答 1

3

急切/延迟加载的问题不是你需要多少行代码,而是它需要多少资源。当使用急切加载时,如在您的第一个示例中,将加载与任何评论关联的“问题”表的所有元素。它们将被检索并保存在内存中,以备使用。当您实际使用它们时($comment ->issues),它们将从内存缓存中加载,而不是从数据库中加载。只执行一个初始“大”查询。但是,如果您关联的记录太多并且您不会使用其中的大部分,那么延迟加载是最好的选择,因为只要您不引用它,就不会从数据库中加载任何记录。因此,当您引用记录时,将执行查询。故事就是这样进行的。所以...急切加载或延迟加载,这就是问题所在。:

于 2012-08-09T03:19:35.260 回答