Laravel DB-Insert Error: Allowed Memory Size Exhausted
Ich in ein Problem, wenn Sie versuchen, einfügen ~20K Datensätze in meiner DB. Ich merke, dass obwohl ich echo in meiner foreach-Schleife, bekomme ich nicht alles ausgegeben, die in der Befehlszeile. Stattdessen bekomme ich eine Fehlermeldung nach dem einlegen ~9440 Belege zu...
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
Hier ist mein code (habe versucht, mit beiden Eloquent und Fließend):
<?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";
}
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser Fehler zeigt, dass Ihr PHP Skript memory limit ausgeschöpft hat, aufgrund ungenügenden Arbeitsspeichers für ein Skript.
Mußt du memory_limit mit der ini_set-Funktion
e.g ini_set('memory_limit','128M');
Die akzeptierte Antwort ist: die Fixierung auf das symptom eher dann das problem. Das problem ist das Laravel-Abfrage-Protokoll (in-memory) ist das Essen alle Ihre RAM bei der Ausführung einer so großen Anzahl von Abfragen. Finden Sie die Antwort hier: https://stackoverflow.com/a/18776710/221745
Oder, kurz gesagt, ausschalten Abfrage-Anmeldung über:
Vor der Ausführung 20k Abfragen
DB::enableQueryLog(); [...] dd(DB::getQueryLog());
stackoverflow.com/a/27753889/2152973