Yii快速加载与延迟加载

Yii快速加载与延迟加载,yii,Yii,我正在玩Yii,并且在Yii快速加载与延迟加载数据库查询方面遇到了一些问题。例如,比较两种方法: $comment=comment::model()->带有(数组('issue'=>数组('condition'=>)项目_ id='。$projectd))->findAll() 2a$comment=comment::model()->findAll 2b。要获得问题,请执行以下操作: $issue=$comment->issues(假设我们在评论模型中声明了“issues”关系) 我不确定第一

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

  • $comment=comment::model()->带有(数组('issue'=>数组('condition'=>)项目_
    id='。$projectd))->findAll()

  • 2a<代码>$comment=comment::model()->findAll

  • 2b。要获得问题,请执行以下操作:

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

    我不确定第一种方法有什么好处。据我所知,第一个代码将只返回注释,但也会运行get Issue查询(如2b代码)。然而,正如我所看到的(虽然我们不确定是否有更好的方法来利用“急切加载”),如果我想在第一段代码中获得注释问题,我还必须运行以下代码:

    三,

    如果是这样的话,作为我的客人,我们必须使用渴望加载方法运行2个查询,因此它比“延迟加载”花费的时间要长,因为它会运行“get Issue查询”两次(第一次运行第一个代码,第二次运行第三个代码)


    那么,您能验证我的想法吗?或者,如果我的想法是错误的,您能告诉我如何利用快速加载方法的效率来解决所有问题。

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

    极好的解释,非常清晰,易于“消化”。非常感谢加西亚!。还有一个小问题:如果我在localhost中,上面提到的缓存是否存储在文件中?如果是的话,我在哪里能找到它?(我使用的是XAMPP1.7.4)。非常感谢。不,结果只是检索并缓存在内存中,直到脚本执行结束。如果希望查看检索到的内容(以及如何检索),可以查看日志并获取SQL查询
    $comment ->issues