查询控制器中的所有内容并返回每个查询或在使用时查看视图是否更快?
假设所有模型都有关系
示例:
在cotroller中执行everythig然后返回
Public function articlesHome($id)
{
$art = Articles::find($id);
$cit = Articles::city();
$tag = Articles::tags();
Return view('articles', compact('art', 'tag', 'cit');
}
或者在视图中(在控制器返回$ article之后)
{{ $article->name }}
...
{{ $article->city->name }}
...
@foreach($article->tags as tag)
{{ tag->name }}
@endforeach
哪种方法最好,速度更快。
答案 0 :(得分:2)
一个好的模式是MVC,它代表模型,视图和控制器。
这是一种关注点分离的设计模式,您可以将应用程序的不同问题分成不同的部分。数据检索是模型(通常是数据库但不一定是),视图(刀片模板)和控制器。
你可以超越MVC并进一步分开,包括Repositories,Events&用于更好分离的命令。
您可能想要使用存储库(它们只是模型的包装器)的原因是从Controller中抽象出数据的实际检索和持久性,允许您从使用数据库更改为另一种形式的奇怪而无需更新控制器中的代码。
答案 1 :(得分:2)
性能方面,只需要找到一种方法来减少数据库查询以获得相同的结果。
一个好的方法是让laravel在一个命令中为你做这件事:
Public function articlesHome($id)
{
$article = Articles::whereId($id)->with('city','tags')->get();
Return view('articles', compact('article');
}
你的观点是一样的。文章关系已经构建,因此不会进行额外的查询。
{{ $article->name }}
...
{{ $article->city->name }}
...
@foreach($article->tags as tag)
{{ tag->name }}
@endforeach
答案 2 :(得分:1)
我认为只要节省将其发送到视图的时间,在视图中执行它会更快。 我建议您安装laravel debugbar以查看详细信息。