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

Allowed memory size of 536870912 bytes exhausted (tried to allocate 330698896 bytes)

我正在尝试更改 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();

您正在将整个 table 加载到内存中。不要那样做。

使用块并将创建方法放在它自己的函数中。自己的功能的原因是它给 php space 开始内部清理使用的变量等...因为范围结束。
还要在事务结束时调用 gc_collect_cycles() 以强制清除未使用的变量。
这应该让你在 ram 的 acceptable 限制范围内。如果还是打中了,每次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();
});

成功解决,代码如下:

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