有啥方法可以避免在 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,它都会对 ModelMModelX 进行查询。这使我的网站变慢。此外,如果我从 ModelA 检索 4-5 行数据,那么它还会对所有这些模型 ModelMModelX 进行运行查询,并且每行也有一个查询。所以查询的数量也增加了。

这些模型之间的关系是一对一、一对多和多对多。

有什么方法可以在加载父模型时避免这些子模型?

【问题讨论】:

【参考方案1】:

如果您在模型中使用 $with 属性,则可以在查询中使用以下命令禁用 eagerLoading:

ModelA::setEagerLoads([])->first();

【讨论】:

以上是关于有啥方法可以避免在 Laravel 5.7 Eloquent 中加载父级时加载这些 $with 模型?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:有啥方法可以在不编译的情况下加载刀片模板?

Laravel 5.7 - 覆盖请求验证类中的 all() 方法以验证路由参数?

当我尝试在 laravel 中更新数据透视表的内容时,有啥方法可以解决非法偏移类型错误

有啥方法可以避免 SwiftUI GeometryReader 阻止嵌套视图在列表中增长?

有啥方法可以用 Laravel 检测数据库表是不是存在

Laravel 路由模型绑定 - Laravel 5.7