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

csm*_*32s 6 php memory-limit laravel

我试图在我的数据库中插入~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";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Eri*_*rik 33

接受的答案是修复症状而不是问题.问题是当你执行如此大量的查询时,Laravel查询日志(在内存中)占用了你所有的RAM.请参阅此处的答案:https://stackoverflow.com/a/18776710/221745

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

DB::disableQueryLog()
Run Code Online (Sandbox Code Playgroud)

在执行20k查询之前

  • 是否必须再次启用才能使用 Querylogging 或者这是针对当前脚本的? (2认同)

Rub*_*wal 0

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

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

  • 我刚刚遇到这个问题,增加内存限制是一个快速解决方案。更好的解决方案是按照下面 @Erik 的建议关闭查询日志记录 (3认同)