gpt4 book ai didi

Yii 预加载 vs 延迟加载

转载 作者:行者123 更新时间:2023-12-02 01:18:46 31 4
gpt4 key购买 nike

我正在使用 Yii,并且在使用 Yii 急切加载延迟加载 数据库查询时遇到一些问题。例如比较两种方式:

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

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

2b。获取问题:

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

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

3.

$comment ->issues

如果是这样,正如我所言,我们必须使用预加载方法运行 2 个查询,因此它比“延迟加载”需要更长的时间,因为它运行“get Issue 查询”两次(第一次运行时第一个代码,第二次运行第三个代码)。

那么,您能否验证一下我的说法,或者如果它是错误的,您能否告诉我如何从利用其效率的预加载方法中获取所有问题。

最佳答案

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

关于Yii 预加载 vs 延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11875841/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com