有没有一种方法可以在Blade中缓存变量?

时间:2019-11-21 10:26:24

标签: php laravel vue.js laravel-blade

我正在使用compact函数从控制器向我的视图传递变量,然后可以在我的视图中访问它。但是,每次访问此变量时,Laravel都会对数据库进行越来越多的调用。

return view('dashboard.overview', compact('aircraft', 'current_location', 'current_flight'));

然后在我的Blade中,我这样调用一个Vue组件:<badge--aircraft--financed :data-aircraft="{{ $aircraft }}"></badge--aircraft--financed>,这将导致10个查询。如果我重复此行,Debugbar表示我进行了20个查询,其中10个被重复。 Blade默认情况下是否不缓存$aircraft变量?

2 个答案:

答案 0 :(得分:2)

Laravel仅缓存刀片模板,而不缓存变量。 您可以将变量缓存在控制器中 https://laravel.com/docs/6.x/cache#cache-usage

此外,为防止大量查询,您可以在获取$ aircraft模型时调用with()方法。 https://laravel.com/docs/6.x/eloquent-relationships#eager-loading

答案 1 :(得分:0)

不是因为有任何缓存。由于__toStringtoJson,因此您的模型正在序列化。这考虑到您已定义要附加到$appends中的数据的访问器。您有正在执行数据库查询的访问器。如果您有10个访问器,并且正在其中进行查询,那么对于您序列化的每个Aircraft模型,您都会生成10个查询。

您应该避免这种情况,请检查是否已加载关系,并使用已加载的关系而不是生成新查询,并尝试尽可能多地渴望加载。