php - plantillas - Laravel Error de inserción DB: Tamaño de memoria permitido Agotado
laravel foreach index (2)
Me encuentro con un problema al tratar de insertar ~ 20K registros en mi base de datos. Me doy cuenta de que, aunque estoy haciendo eco dentro de mi ciclo foreach, no obtengo ningún resultado en la línea de comando. En cambio, recibo un error relacionado con el 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
después de insertar ~ 9440 registros.
Aquí está mi código (intenté usar tanto Eloquent como Fluent):
<?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";
}
}
}
Este error muestra que su script PHP ha agotado el límite de memoria debido a la memoria insuficiente asignada para el script.
Necesita aumentar memory_limit usando la función ini_set, por ejemplo, ini_set (''memory_limit'', ''128M'');
La respuesta aceptada es corregir el síntoma en lugar del problema. El problema es que el registro de consultas de Laravel (en la memoria) consume toda tu RAM cuando ejecutas un gran número de consultas. Vea la respuesta aquí: https://.com/a/18776710/221745
O, en resumen, desactive el registro de consultas a través de:
DB::disableQueryLog()
Antes de ejecutar 20k consultas