Tay*_*lor 2 php caching laravel
我处于这样一种情况,我有很多关系,并且当我进行大量查询时,它会减慢网站速度,这正成为一个问题。
例如,我正在为所有博客执行 foreach 循环并获取创建博客的用户。
@foreach ($blogs as $blog)
<a href="{{ route('blog.view', str_slug($blog->title)) }}">{{ $blog->title }}</a>
{{ $blog->created_at }}
<a href="{{ viewProfile($blog->user) }}"><{{ $blog->user->username }}/a>
Last Commenter:
<a href="{{ viewProfile($blog->lastCommenter()->user) }}">
{{ $blog->lastCommenter()->user->username }}
</a>
@endforeach
Run Code Online (Sandbox Code Playgroud)
仅此一项就超过 50 多个查询。如果有 100 个博客,查询的数量就远远不够了。
我怎样才能避免这样做?我已将它存储在此视图中的一个变量中,但我不想真正将任何 PHP 代码放入刀片文件中。我怎样才能避免这样做?我曾尝试在数据库中使用缓存,但这也对数据库中的缓存表进行了一些查询。我也在使用急切加载,这有很大帮助。但是我怎样才能最好地做这种事情呢?
非常感谢您提前回复。
这就是所谓的N+1问题。您应该首先学习如何使用Eager 加载和加载关系。然后迭代集合以向用户显示数据。
从文档中预先加载多个关系的示例:
$books = App\Book::with('author', 'publisher')->get();
Run Code Online (Sandbox Code Playgroud)
@Achraf Khouadja 建议的示例和教程:
$blogs = blog::with('lastCommenter', 'user')->get();
Run Code Online (Sandbox Code Playgroud)