6

尝试将 ~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";
        }
    }
}
4

2 回答 2

34

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

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

DB::disableQueryLog()

在执行 20k 查询之前

于 2013-09-23T17:53:20.910 回答
0

此错误描述了由于为脚本分配的内存不足,您的 PHP 脚本已用尽内存限制。

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

于 2012-09-16T00:59:10.640 回答