I have a function where I keep mysql with laravel around between 6500 and 7000 records to the database therefore are that amount of iteration is delayed around 15 minutes what I find is a lot,
I know that it depends a lot on how this code is written for the performance but in any case I ask for the clarification of the understanding
Is there any way to make it take less time?
[Upload my code]
foreach ($detallado as $value => $d) {
try {
if (! empty($d['IdUnidadRecaudadora'])) {
$tratamiento = Helpers::BuscaOrdenArchivo($idtiporecaudacion);
$posmonto = $tratamiento['monto'];
if ($tratamiento['dv'] == "-") {
$rutpos = $tratamiento['rut'];
$rut = $d[$rutpos];
} else {
$posrut = $tratamiento['rut'];
$posdv = $tratamiento['dv'];
$rut = trim($d[$posrut]).trim($d[$posdv]);
}
if ($idtiporecaudacion == 10) {
$rut = $d[$tratamiento['rut']];
$rutcompleto = Helpers::SeparaRut(trim($rut));
$rut = $rutcompleto[0];
$Dv = $rutcompleto[1];
$monto = trim(str_replace('V', '', $d[$posmonto]));
} else {
$rutcompleto = Helpers::SeparaRut($rut);
$rut = $rutcompleto[0];
$Dv = $rutcompleto[1];
$monto = $d[$posmonto];
}
$contribuyente = Contribuyente::where([
['Rut', '=', $rut],
['Dv', '=', $Dv],
])->get()->toarray();
if (!empty($contribuyente[0]['IdContribuyente'])) {
//Si existe entonces busca compromiso de pago
$compromisopago = CompromisoPago::with('mandato')->where([
['C_IdContribuyente', '=', $contribuyente[0]['IdContribuyente']],
['UR_IdUnidadRecaudadora', '=', $d['IdUnidadRecaudadora']],
['Estatus', '=', 1],
])->first();
if (!empty($compromisopago->mandato->Folio)) {
// Si no esta vacio el folio lo asigna a la variable
$folio = $compromisopago->mandato->Folio;
if (empty($compromisopago->IdCompromisoPago)) {
// entra si no existe compromiso de pago
$logs = new Logs();
$logs->Mensaje = 'no se encuentra compromiso de pago';
$logs->Accion = 'Buscar id del compromiso de pago';
$logs->Variable1 = 'Id del contribuyente: '.$contribuyente[0]['IdContribuyente'];
$logs->Variable2 = ' no se encuentra comnpromiso de pago pero aun asi se guarda el detalle fecha: '.$fechaestadistica;
$logs->save();
$idcompromisopago = 1;
} else {
//existe compromiso de pago por lo que lo asigna a una variable
$idcompromisopago = $compromisopago->IdCompromisoPago;
}
} else {
// guardar en tabla logs no existe mandato
$logs = new Logs();
$logs->Mensaje = 'no se encuentra mandato(Folio)';
$logs->Accion = 'Buscar mandato(Folio)';
$logs->Variable1 = 'Rut del contribuyente:'.$contribuyente[0]['Rut'].'-'.$contribuyente[0]['Dv'].' e id de la UR: '.$d['IdUnidadRecaudadora'];
$logs->Variable2 = 'Con fecha de subida '.$fechaestadistica;
$logs->save();
}
} else {
// guardar en tabla logs no existe contribuyente pero igual se guarda el detalle perro papurri papa
$logs = new Logs();
$logs->Mensaje = 'no se encuentra Contribuyente';
$logs->Accion = 'Buscar id del contribuyente Rut '.$rut.' dv '.$Dv;
$logs->Variable1 = 'id tipo recaudación '.$idtiporecaudacion;
$logs->Variable2 = ' no se encuentra contribuyente pero aun asi se guarda el detalle fecha: '.$fechaestadistica;
$logs->save();
}
}
$detalle = new Pago();
$detalle->CP_IdCompromisoPago = $idcompromisopago;
$detalle->NroComprobante = $folio;
$detalle->MontoPagado = $monto; //monto pagado
$detalle->FechaPago = $fechacontable;
$detalle->MesPago = substr($fechaestadistica, 5, 2);
$detalle->save();
unset($detallado[$value]);
} catch (\Exception $e) {
dd($e->getMessage(), $e->getLine(), $d);
}