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 запросов