我正在使用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
变量?
答案 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)
不是因为有任何缓存。由于__toString
是toJson
,因此您的模型正在序列化。这考虑到您已定义要附加到$appends
中的数据的访问器。您有正在执行数据库查询的访问器。如果您有10个访问器,并且正在其中进行查询,那么对于您序列化的每个Aircraft模型,您都会生成10个查询。
您应该避免这种情况,请检查是否已加载关系,并使用已加载的关系而不是生成新查询,并尝试尽可能多地渴望加载。