有啥方法可以避免在 Laravel 5.7 Eloquent 中加载父级时加载这些 $with 模型?
Posted
技术标签:
【中文标题】有啥方法可以避免在 Laravel 5.7 Eloquent 中加载父级时加载这些 $with 模型?【英文标题】:Is there any way to avoid these $with models from loading whenever loading the parent in Laravel 5.7 Eloquent?有什么方法可以避免在 Laravel 5.7 Eloquent 中加载父级时加载这些 $with 模型? 【发布时间】:2019-09-29 05:41:44 【问题描述】:我有一个laravel
应用程序,其中有使用$with 的模型,每当我加载这个模型时,它都会在前端加载它的子模型的$with。你们能告诉我如何避免这种情况吗?
下面是一个例子,让你们理解这个场景。
ModelA.php
$with = [ModelK, ModelL, ModelM];
ModelK.php
$with = [ModelM, ModelN];
ModelM.php
$with = [ModelX, ModelY, ModelZ];
在我的前端,无论我在哪里使用带有 eloquent 的 ModelA
,它都会对 ModelM
、ModelX
进行查询。这使我的网站变慢。此外,如果我从 ModelA
检索 4-5 行数据,那么它还会对所有这些模型 ModelM
、ModelX
进行运行查询,并且每行也有一个查询。所以查询的数量也增加了。
这些模型之间的关系是一对一、一对多和多对多。
有什么方法可以在加载父模型时避免这些子模型?
【问题讨论】:
【参考方案1】:如果您在模型中使用 $with
属性,则可以在查询中使用以下命令禁用 eagerLoading:
ModelA::setEagerLoads([])->first();
【讨论】:
以上是关于有啥方法可以避免在 Laravel 5.7 Eloquent 中加载父级时加载这些 $with 模型?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.7 - 覆盖请求验证类中的 all() 方法以验证路由参数?
当我尝试在 laravel 中更新数据透视表的内容时,有啥方法可以解决非法偏移类型错误