允许的内存大小为536870912字节耗尽(试图分配330698896字节)

时间:2018-03-22 08:48:47

标签: php laravel-5.5

我正在尝试更改php.ini中的memory_limit,php.ini使用新的内存大小保存正常,但我一直在获得相同的内存大小问题?我正在使用Laravel 5.5和Homestead。

如果有人可以帮助我,我将不胜感激。谢谢!

以下是试图运行的代码(将数据从一个数据库导入另一个数据库,其余表除了一个之外都很好)

    $repair = DB::connection('db')->table('tablename')->get();

    DB::beginTransaction();

    foreach ($repair as $repairs) {

        Model::create([
            'column' => $repairs->column,
             ...so on

        ]);

    };

    DB::commit();

3 个答案:

答案 0 :(得分:0)

您正在内存中加载整个表格。不要这样做。

使用chunk并将create方法放在其自己的函数中。自己的功能的原因是它提供了php空间来开始内部清理已使用的变量等...因为范围结束 在事务结束时调用gc_collect_cycles()以强制清除未使用的变量 这应该让你在可接受的公羊范围内。如果你仍然击中它,每次尝试250或100。

    $query = DB::connection('db')->table('tablename')->orderBy('id','asc');
    $query->chunk(500, function($results) {

        DB::beginTransaction();
        $repairMethod = function($repair) {
            Model::create([
                'column' => $repair->column,
                 ...so on
            ]);
        };

       foreach ($results as $repair) {
           $repairMethod($repair)      
       };

       DB::commit();
       gc_collect_cycles();
});

答案 1 :(得分:0)

管理解决它,这是代码:

    $query = DB::connection('db')->table('tablename')->orderBy('id', 
    'asc');

    $query->chunk(50, function ($ServiceOrders) {

        DB::transaction(function() use ($ServiceOrders) {

            foreach ($ServiceOrders as $repairs) {
                Model::create([
                    'column' => $repairs->column,
                     ...so on
                ]);
            }
        });
    });

答案 2 :(得分:-1)

尝试

 $repair = DB::connection('db')->table('tablename')->get();

    DB::beginTransaction();

    foreach ($repair as $repairs) {

        Model::create([
            'column' => $repairs->column,
             ...so on

        ]);
sleep ( 15 )

    };

    DB::commit();

可能是你正在处理繁重的事情,因为你没有发布完整的代码,我认为你应该在每笔交易后使用睡眠