mardi 16 juin 2020

Is laravel 7 less efficient than laravel 5.5

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