I'm upgrading my project from laravel 5.5 to 7, I have a method that populates a table after a little control, the thing is, in laravel 5 this method works really well even with transactions, but the version 7 throws an error of time excecution.
I've increased the the max_execution_time to 250 which is more than enough for the version 5.5 but not for the v7.
I've removed the transactions for the version 7 and increased the chunk
size but it also don't work, so, is there an efficient way to make a masive insert in laravel 7?
method for the version 5.5
public function inventarioInicial(Request $request)
{
$empresa = Empresa::find($request->empresa_id);
$this->eliminarInventarioInicial($empresa);
DB::beginTransaction();
try {
$empresa->productos()->chunk(100, function ($items) use ($empresa) {
foreach ($items as $item) {
$inv = new Inventario_inicial();
$inv->producto_nombre_id = $item->producto_nombre_id;
$inv->existencias = $item->existencias;
$inv->promedio = $item->producto_nombre->costo_promedio;
$inv->total = $inv->existencias * $inv->promedio;
$inv->save();
$auxMovimiento = new ProductoController();
$aux1 = Costo_promedio::select('id')->where('producto_nombre_id', $inv->producto_nombre_id)->latest()->first();
if (isset($aux1)) {
$aux = intval($aux1->id);
} else {
$aux = Costo_promedio::find(1)->id;
}
$auxMovimiento->agregarMovimiento(10, $inv->id, $inv->producto_nombre_id, $empresa, $aux, 0, $inv->existencias);
$empresa->inventario_inicial()->syncWithoutDetaching($inv->id);
}
});
} catch (Exception $ex) {
DB::rollback();
return response()->json(array('errors' => ['guardar' => 'Ocurrió un error.', 'a' => $ex->getMessage() . ' linea. ' . $ex->getLine()]));
}
DB::commit();
return response()->json(array('realizado' => ['Inventario inicial generado']));
}
method for the version 7
public function inventarioInicial(Request $request)
{
$empresa = Empresa::find($request->empresa_id);
$this->eliminarInventarioInicial($empresa);
try {
$empresa->productos()->chunk(200, function ($items) use ($empresa) {
foreach ($items as $item) {
$inv = new Inventario_inicial();
$inv->producto_nombre_id = $item->producto_nombre_id;
$inv->existencias = $item->existencias;
$inv->promedio = $item->producto_nombre->costo_promedio;
$inv->total = $inv->existencias * $inv->promedio;
$inv->save();
$auxMovimiento = new ProductoController();
$aux1 = Costo_promedio::select('id')->where('producto_nombre_id', $inv->producto_nombre_id)->latest()->first();
if (isset($aux1)) {
$aux = intval($aux1->id);
} else {
$aux = Costo_promedio::find(1)->id;
}
$auxMovimiento->agregarMovimiento(10, $inv->id, $inv->producto_nombre_id, $empresa, $aux, 0, $inv->existencias);
$empresa->inventario_inicial()->syncWithoutDetaching($inv->id);
}
});
} catch (Exception $ex) {
return response()->json(array('errors' => ['guardar' => 'Ocurrió un error.', 'a' => $ex->getMessage() . ' linea. ' . $ex->getLine()]));
}
return response()->json(array('realizado' => ['Inventario inicial generado']));
}
the amount of productos()
is 3331 the method eliminarInventarioInicial()
just removes previous inserts of that table
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire