php - Laravel 无法获取超过 15k 条记录
问题描述
我有一个非常简单的查询来从数据库中获取记录:
\DB::table("table")->get();
当我尝试从数据库中获取超过 ±145000 条记录时,我得到:
500 server error
.
代码如下:
\DB::table("table")->take(14500)->get();
虽然有效。当我尝试获得超过 15k 时,我会立即收到错误,而无需任何加载或更多信息。我也无法从日志中获取更多信息。奇怪的是,当我将那个代码写到 tinker 时——我可以得到所有的记录。(与雄辩的作品相同)
解决方案
如果您检查错误日志,您很可能会看到以下内容:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 54 bytes)
最好将结果分块而不是一次将其全部加载到内存中
\DB::table("table")->chunk(500, function($results) {
foreach($results as $result) {
do your thing
}
});
推荐阅读
- java - 在 corretto docker 映像中运行 openvpn 失败并出现安全问题
- python - 从长格式 DataFrame2 中的匹配索引中减去 DataFrame1 中的列
- node.js - 无服务器离线 + DynamoDb 本地问题
- c# - 带有只读 getter 的属性有什么好处?
- database - Laravel 使用相关表检索数据
- flutter - 如何在颤振中启用/禁用登录页面
- android - 媒体存储记录在 Android 10 中将图像保存到图片文件夹时未创建
- pine-script - Pine 脚本版本 2 到 4 转换标识符错误
- docker - 执行主机系统命令并将结果作为构建参数传递给 docker-compose
- node.js - CORS ERROR strict-origin-when-cross-origin Cloudflare + Apache + Proxy + NodeJs