首页 > 解决方案 > Laravel 无法获取超过 15k 条记录

问题描述

我有一个非常简单的查询来从数据库中获取记录:

\DB::table("table")->get();

当我尝试从数据库中获取超过 ±145000 条记录时,我得到: 500 server error.

代码如下:

\DB::table("table")->take(14500)->get();

虽然有效。当我尝试获得超过 15k 时,我会立即收到错误,而无需任何加载或更多信息。我也无法从日志中获取更多信息。奇怪的是,当我将那个代码写到 tinker 时——我可以得到所有的记录。(与雄辩的作品相同)

标签: phplaravelpostgresqllaravel-5.1

解决方案


如果您检查错误日志,您很可能会看到以下内容:

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
    }    
});

推荐阅读