Это лучшая практика для этого?
Вы связываете часть VIEW архитектуры MVC с самой моделью, что не является хорошей практикой.
Когда эта функция будет вызываться? :
Это запустится, как только шаблонизатор Laravel отобразит этот клинок.
Что будет:
Он сделает дополнительный вызов в базу данных, получит все строки и затем выполнит collection count()
, что намного медленнее, чем mysql count()
.
Эта функция замедляет страницу? Да. Немного улучшите производительность запросов:
App\Models\CarModel::select(DB::raw('count(*) as total_cars'))
->where('id',$this->modelId)
->pluck('total_cars');
Этот запрос аналогичен тому, что происходит с методом withCount()
через отношение.
Если есть какой-либо цикл foreach, то как эта функция будет вести себя для каждого объекта?
Если вы просматриваете объект и делаете вызов, чтобы получить счетчик, то перед каждым изменением происходит дополнительный вызов в базу данных, аналогичный N + 1 проблеме
Лучший способ сделать это - проверить ответ @Dan.