Laravel DB Insert Error: разрешенный размер памяти исчерпан

я столкнулся с проблемой при попытке вставить записи ~20K в мою БД. Я замечаю, что, хотя я повторяю внутри своего цикла foreach, я ничего не получаю в командной строке. Вместо этого я получаю сообщение об ошибке, относящееся к 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 после вставки ~9440 записей.

вот мой код (пробовал использовать как красноречивый, так и беглый):

<?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 $totaln";
        }
    }

}

2 ответов


эта ошибка показывает, что ваш PHP-скрипт исчерпал лимит памяти из-за нехватки памяти, выделенной для скрипта.

необходимо увеличить memory_limit с помощью функции ini_set е.г безопасность('memory_limit','вспышка 128m');


принятый ответ фиксирует симптом, а не проблему. Проблема в том, что журнал запросов Laravel (в памяти) съедает всю вашу ОЗУ при выполнении такого большого количества запросов. См. ответ здесь:https://stackoverflow.com/a/18776710/221745

или, вкратце, отключить ведение журнала запросов через:

DB::disableQueryLog()

перед выполнением 20k запросов