有没有办法在刀片中缓存变量?



我使用 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 个是重复的。默认情况下,刀片式服务器不会缓存$aircraft变量吗?

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

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

这不是因为任何缓存。由于toJson __toString,您的模型正在序列化。这考虑了您定义的要追加到$appends中的数据的访问器。您有正在执行数据库查询的访问器。如果您有 10 个访问器,并且您正在其中执行查询,那么对于您序列化的每个飞机模型,您将生成 10 个查询。

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

最新更新