亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Laravel:如果有任何函數是在模型類中編寫的……并且如果我們通過

Laravel:如果有任何函數是在模型類中編寫的……并且如果我們通過

PHP
精慕HU 2021-05-03 17:23:01
我正在使用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問題


查看完整回答
反對 回復 2021-05-28
  • 2 回答
  • 0 關注
  • 165 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號