gpt4 book ai didi

php - Laravel Eloquent : Reduce number of queries

转载 作者:行者123 更新时间:2023-11-29 03:53:45 25 4
gpt4 key购买 nike

假设我在 users 表中有 250 个用户,每个用户都有一本或多本书,每本书都有一个或多个章节。现在我想打印用户名和他们的书名。

Controller :

$users = User::all();

在 Blade 中:

@foreach($users as $user)
<tr>
<td>{{ $user->id }}</td>
<td>{{ $user->name }}</td>
<td>
@foreach($user->books as $book)
{{ $book->name }},
@endforeach
</td>
</tr>
@endforeach

# of queries 252

现在要克服n+1问题,查询应该是

$users = User::with('books')->get();

现在查询的数量只有 2 个。

我想像这样打印带有章节数的书名->书名(章节数)。所以在我的刀刃上

@foreach($users as $user)
<tr>
<td>{{ $user->id }}</td>
<td>{{ $user->name }}</td>
<td>
@foreach($user->books as $book)
{{ $book->name }} ({{ $book->chapters->count() }}),
@endforeach
</td>
</tr>
@endforeach

因此,对于 750 本 1500 章的书籍,查询数量约为 752,并且随着章节数量的增加而增加。

是否有更好的 Eloquent 方法来减少它,或者我应该使用原始 SQL 查询?

最佳答案

您不需要加载所有章节数据,然后手动计算每个集合。使用 withCount()相反:

$users = User::with('books')->withCount('chapters')->get();

If you want to count the number of results from a relationship without actually loading them you may use the withCount method, which will place a {relation}_count column on your resulting models.

关于php - Laravel Eloquent : Reduce number of queries,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41541126/

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