我正在使用Laravel 5。如果我已經在Model類上編寫了一個函數,并通過laravel將其對象雄辯地指向了諸如cars.blade.phpfile之類的任何視圖文件,現在如果我從cars.blade.php像模特班Car.phppublic function totalModels() {
return App\Models\CarModel::where('id',$this->modelId)->count();
}Cars.blade.php<span>Available Models : {{ $car->totalModels() }}</span>所以我的問題是什么時候該函數會調用?此功能會使頁面變慢嗎?這是最佳做法嗎?如果有任何foreach循環,那么此函數將如何作用于每個對象?
2 回答

慕桂英546537
TA貢獻1848條經驗 獲得超10個贊
這是最佳做法嗎? 您正在將MVC體系結構的VIEW部分耦合到Model本身,這不是一個好習慣。
什么時候該函數會調用?:這將在laravel模板引擎渲染該刀片后立即運行。
將會發生什么: 它將對數據庫進行一次額外的調用以獲取所有行,然后執行collection count()比mysql慢得多的a count()。
此功能會使頁面變慢嗎?是的。至少可以稍微提高查詢性能:
App\Models\CarModel::select(DB::raw('count(*) as total_cars'))
->where('id',$this->modelId)
->pluck('total_cars');
該查詢類似于withCount()通過關系對方法進行的查詢。
如果有任何foreach循環,那么此函數將如何作用于每個對象? 如果您要傳給對象并進行調用以獲取計數,則為傳給每個對象額外的對數據庫的調用將類似于N + 1問題
- 2 回答
- 0 關注
- 165 瀏覽
添加回答
舉報
0/150
提交
取消