我正在使用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 回答
![?](http://img1.sycdn.imooc.com/5458502c00012d4a02200220-100-100.jpg)
慕桂英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 关注
- 145 浏览
添加回答
举报
0/150
提交
取消