为了账号安全,请及时绑定邮箱和手机立即绑定

大查询中的高内存使用率雄辩的 laravel

大查询中的高内存使用率雄辩的 laravel

PHP
Helenr 2023-04-28 16:39:26
当我查询超过 1000 条记录时,Eloquent 会占用大量内存。我该如何解决?!例如,假设有一个users包含 10000 多条记录的表,我想运行以下语句。User::whereIsActive(1)->get()     ->each(fn (User $user) => $user->notify())
查看完整描述

1 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

你可以each()直接在 Eloquent-Builder 链中使用。通过使用each()Laravel 自动将结果按 1000 分块。

User::whereIsActive(1)->each(fn (User $user) => $user->notify());

如果您想要较低的块,请将第二个参数添加到each()

User::whereIsActive(1)->each(fn (User $user) => $user->notify(), 100);

您的原始代码get()在 之前执行each()get()执行数据库查询并将所有结果加载到内存中,然后使用 Laravel 集合each()对它们进行分块。这就是为什么它使用这么多内存。


查看完整回答
反对 回复 2023-04-28
  • 1 回答
  • 0 关注
  • 105 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信