猿问

Laravel:如果有任何函数是在模型类中编写的……并且如果我们通过

我正在使用Laravel 5。如果我已经在Model类上编写了一个函数,并通过laravel将其对象雄辩地指向了诸如cars.blade.phpfile之类的任何视图文件,现在如果我从cars.blade.php

像模特班

Car.php

public function totalModels() {
    return App\Models\CarModel::where('id',$this->modelId)->count();
    }

Cars.blade.php

<span>Available Models : {{ $car->totalModels() }}</span>

所以我的问题是

什么时候该函数会调用?
此功能会使页面变慢吗?
这是最佳做法吗?
如果有任何foreach循环,那么此函数将如何作用于每个对象?


精慕HU
浏览 146回答 2
2回答

慕桂英546537

这是最佳做法吗? 您正在将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问题
随时随地看视频慕课网APP
我要回答