更快地查询控制器或视图中的所有内容


Laravel Faster to query everything in controller or view

查询控制器中的所有内容并返回每个查询是否更快,或者在视图中查询您使用它?

假设所有的模型都有关系

的例子:

在控制器中执行所有操作,然后返回

Public function articlesHome($id)
{
$art = Articles::find($id);
$cit = Articles::city();
$tag = Articles::tags();
Return view('articles', compact('art', 'tag', 'cit');
}

Or in view (after controller return $article)

{{ $article->name }}
...
{{ $article->city->name }}
...
@foreach($article->tags as tag)
{{ tag->name }}
@endforeach

性能方面,这只是找到一种方法来获得更少的数据库查询,以达到相同的结果。

一个好的方法是让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 

一个很好的模式是MVC,它代表模型,视图和控制器。

这是一种关注关注点分离的设计模式,在这种模式中,您将应用程序的不同关注点分离到不同的部分。数据检索是模型(通常是数据库,但不一定)、视图(Blade模板)和控制器。

你可以超越MVC和进一步分离的东西,包括仓库,事件&;

您可能想要使用存储库(它只是您的模型的包装器)的原因是从您的控制器中抽象出实际的检索和数据的持久性,允许您从使用数据库更改为另一种形式的奇异,而无需更新您的控制器中的代码。

我认为在视图中这样做会更快,只要你节省发送给视图的时间。我建议你安装laravel debugbar来查看详细信息。