gpt4 book ai didi

php - Laravel - Blade View 中的重复查询 - 减少查询数量

转载 作者:行者123 更新时间:2023-12-02 21:03:26 26 4
gpt4 key购买 nike

我所处的情况是,我有很多关系,这正在成为一个问题,因为当我进行大量查询时,它会减慢网站的速度。

例如,我正在对所有博客执行 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

仅此一项就超过 50 多个查询。如果有大约 100 个博客,查询的数量就少得多。

如何避免这样做?我已将其存储在此 View 中的变量中,但我不想真正将任何 PHP 代码放入 Blade 文件中。我怎样才能避免这样做?我尝试过在数据库中使用缓存,但这也对数据库中的缓存表进行了一些查询。我也在使用急切加载,这很有帮助。但我怎样才能最好地做这种事情呢?

非常感谢您提前回复。

最佳答案

这就是所谓的N+1问题。您应该学习如何使用Eager loading首先是负载关系。然后迭代集合以向用户显示数据。

从文档中预先加载多个关系的示例:

$books = App\Book::with('author', 'publisher')->get();

示例和 tutorial由@Achraf Khouadja 建议:

$blogs = blog::with('lastCommenter', 'user')->get();

关于php - Laravel - Blade View 中的重复查询 - 减少查询数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37176056/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com