Laravel数据库插入错误:允许的内存大小已耗尽


Laravel DB Insert Error: Allowed Memory Size Exhausted

我在尝试将约20K条记录插入数据库时遇到问题。我注意到,即使我在foreach循环中进行了响应,我也没有在命令行中得到任何输出。相反,在插入大约9440条与…有关的记录后,我得到了一个错误

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 91 bytes) in /Users/me/Sites/Laravel/database/connection.php on line 293

这是我的代码(尝试使用Eloquent和Fluent):

<?php
class Process_Controller extends Base_Controller
{
    public function action_migrate()
    {
        $properties = DB::table('raw_properties')->get('id');
        $total = count($properties);
        foreach ($properties as $x => $p) {
            $r = RawProperty::find($p->id);
            $count = $x + 1;
            $prop_details = array(
                'column' => $r->field,
                // Total of 21 fields
            );
            DB::table('properties')->insert($prop_details);
            echo "Created #$count of $total'n";
        }
    }
}

公认的答案是解决症状而不是问题。问题是,当你执行如此大量的查询时,Laravel查询日志(内存中)正在吞噬你所有的RAM。请在此处查看答案:https://stackoverflow.com/a/18776710/221745

或者,简而言之,通过以下方式关闭查询日志记录:

DB::disableQueryLog()

在执行20k查询之前,

此错误表示您的PHP脚本由于分配给脚本的内存不足而耗尽了内存限制。

您需要使用ini_set函数来增加memory_limit例如ini_set('memory_limit','128M');

我执行了DB::disableQueryLog()并继续得到错误。我最终暂停了Telescope记录查询。您可以从望远镜web界面>查询>单击"暂停"图标。