Laravel with()方法的最佳实践

时间:2018-06-24 11:15:38

标签: laravel eloquent

我想知道在通过视图进行连接或获取模型本身时,是否存在最佳连接的分支。

这个电话也会这样:

$deposit = Class::where('request_type', 1)->where('id', $id)->with(['customer', 'currencyTable', 'bankList', 'customerBank']);

在性能和其他因素方面完全,如下所示:

return view('whatever.howEver.show', compact('oneVar', 'twoVar', 'etc'))->with(['customer', 'currencyTable', 'bankList', 'customerBank']);

如果在性能等方面等效,那么您将with()放在哪里?

1 个答案:

答案 0 :(得分:0)

第一个示例

$deposit = Class::where('request_type', 1)
->where('id', $id)->with(['customer', 'currencyTable', 'bankList', 'customerBank']);

您要查询Class模型,并通过with()要求它预加载Class中定义的客户,currencyTable,...关系。

第二个示例

return view('whatever.howEver.show', compact('oneVar', 'twoVar', 'etc'))
->with(['customer', 'currencyTable', 'bankList', 'customerBank']);

这将返回给定的视图,并赋予视图对所列变量的访问权限,类似于您对compact的用法。这一点都不完全相同,也不会询问我所知的关系。

为什么它们都起作用

Laravel有一种称为延迟加载的东西。即使您不像第一个示例中那样使用with(),仍然可以使用关系,但是不同之处在于,仅在访问关系时才查询该关系,这意味着将执行多个查询(通常较慢)。 / p>