I need help from someone who can kindly lend me a hand, since I need to optimize a Laravel query with Eloquent or QueryBuilder , for which I asked you tried so much that I no longer knew what it does and leave the code as it was. Here I show them to you. Said query causes the server to crash and take very high peaks of consumption, in advance I would appreciate your help
$query = "SELECT a.id, cc.codigo, cc.nombre, a.unidad_medida_id, um.nombre as tipo_cambio, a.descripcion,
(SELECT count(adx1.id)
FROM `amortizacion` ax1
inner join amortizacion_detalle adx1 on adx1.amortizacion_id = ax1.id
WHERE ax1.cliente_id=$cliente_id
and adx1.archivada = 0
and ax1.cuenta_corto_plazo=$cuenta_corto_plazo->cuenta_corto_plazo
and adx1.fecha_vencimiento > '$fecha_corte' and adx1.fecha_vencimiento <='$fecha_12_meses'
) + (SELECT count(adx1.id)
FROM `amortizacion` ax1
inner join amortizacion_detalle adx1 on adx1.amortizacion_id = ax1.id
WHERE ax1.cliente_id=$cliente_id
and adx1.pago_monto = 0
and ax1.cuenta_corto_plazo=$cuenta_corto_plazo->cuenta_corto_plazo
and adx1.fecha_vencimiento <= '$fecha_corte'
) AS cuotas,
b.nombre as banco,
t.nombre as tipo,
(SELECT sum(adx1.capital)
FROM `amortizacion` ax1
inner join amortizacion_detalle adx1 on adx1.amortizacion_id = ax1.id
WHERE ax1.cliente_id=$cliente_id
and adx1.archivada = 0
and ax1.cuenta_corto_plazo=$cuenta_corto_plazo->cuenta_corto_plazo
and adx1.fecha_vencimiento > '$fecha_corte' and adx1.fecha_vencimiento <='$fecha_12_meses'
) + COALESCE((SELECT sum(adx1.capital)
FROM `amortizacion` ax1
inner join amortizacion_detalle adx1 on adx1.amortizacion_id = ax1.id
WHERE ax1.cliente_id=$cliente_id
and adx1.pago_monto = 0
and ax1.cuenta_corto_plazo=$cuenta_corto_plazo->cuenta_corto_plazo
and adx1.fecha_vencimiento <= '$fecha_corte'
),0) AS capital,
(SELECT sum(adx1.intereses)
FROM `amortizacion` ax1
inner join amortizacion_detalle adx1 on adx1.amortizacion_id = ax1.id
WHERE ax1.cliente_id=$cliente_id
and adx1.archivada = 0
and ax1.cuenta_corto_plazo=$cuenta_corto_plazo->cuenta_corto_plazo
and adx1.fecha_vencimiento > '$fecha_corte' and adx1.fecha_vencimiento <='$fecha_12_meses'
) + COALESCE((SELECT sum(adx1.intereses)
FROM `amortizacion` ax1
inner join amortizacion_detalle adx1 on adx1.amortizacion_id = ax1.id
WHERE ax1.cliente_id=$cliente_id
and ax1.cuenta_corto_plazo=$cuenta_corto_plazo->cuenta_corto_plazo
and adx1.pago_monto = 0
and adx1.fecha_vencimiento <= '$fecha_corte'
),0) AS intereses,
(SELECT sum(adx1.iva)
FROM `amortizacion` ax1
inner join amortizacion_detalle adx1 on adx1.amortizacion_id = ax1.id
WHERE ax1.cliente_id=$cliente_id
and adx1.archivada = 0
and ax1.cuenta_corto_plazo=$cuenta_corto_plazo->cuenta_corto_plazo
and adx1.fecha_vencimiento > '$fecha_corte' and adx1.fecha_vencimiento <='$fecha_12_meses'
) + COALESCE((SELECT sum(adx1.iva)
FROM `amortizacion` ax1
inner join amortizacion_detalle adx1 on adx1.amortizacion_id = ax1.id
WHERE ax1.cliente_id=$cliente_id
and adx1.pago_monto = 0
and ax1.cuenta_corto_plazo=$cuenta_corto_plazo->cuenta_corto_plazo
and adx1.fecha_vencimiento <= '$fecha_corte'
),0) AS iva,
(SELECT sum(adx1.comision)
FROM `amortizacion` ax1
inner join amortizacion_detalle adx1 on adx1.amortizacion_id = ax1.id
WHERE ax1.cliente_id=$cliente_id
and adx1.archivada = 0
and ax1.cuenta_corto_plazo=$cuenta_corto_plazo->cuenta_corto_plazo
and adx1.fecha_vencimiento > '$fecha_corte' and adx1.fecha_vencimiento <='$fecha_12_meses'
) + COALESCE((SELECT sum(adx1.comision)
FROM `amortizacion` ax1
inner join amortizacion_detalle adx1 on adx1.amortizacion_id = ax1.id
WHERE ax1.cliente_id=$cliente_id
and ax1.cuenta_corto_plazo=$cuenta_corto_plazo->cuenta_corto_plazo
and adx1.pago_monto = 0
and adx1.fecha_vencimiento <= '$fecha_corte'
), 0) AS comision,
(SELECT sum(adx1.valor_cuota)
FROM `amortizacion` ax1
inner join amortizacion_detalle adx1 on adx1.amortizacion_id = ax1.id
WHERE ax1.cliente_id=$cliente_id
and adx1.archivada = 0
and ax1.cuenta_corto_plazo=$cuenta_corto_plazo->cuenta_corto_plazo
and adx1.fecha_vencimiento > '$fecha_corte' and adx1.fecha_vencimiento <='$fecha_12_meses'
) + COALESCE((SELECT sum(adx1.valor_cuota)
FROM `amortizacion` ax1
inner join amortizacion_detalle adx1 on adx1.amortizacion_id = ax1.id
WHERE ax1.cliente_id=$cliente_id
and ax1.cuenta_corto_plazo=$cuenta_corto_plazo->cuenta_corto_plazo
and adx1.pago_monto = 0
and adx1.fecha_vencimiento <= '$fecha_corte'
),0) AS cuota_a_pago
FROM `amortizacion` a
INNER JOIN `amortizacion_detalle` ad ON ad.amortizacion_id = a.id
inner join entidads b on b.id = a.entidad_id
inner join tipo_operacions t on t.id = a.tipo_operacion_id
inner join unidad_medidas um on um.id = a.unidad_medida_id
inner join cuentas_contabilidad cc on cc.codigo=a.cuenta_corto_plazo and cc.cliente_id = a.cliente_id
WHERE a.cliente_id = $cliente_id
AND a.cuenta_corto_plazo = $cuenta_codigo
group by a.id, cc.codigo, cc.nombre, a.unidad_medida_id, um.nombre, a.descripcion";
$encabezado = DB::select( DB::raw($query) );
Look I give you a simple example and adapt it to yours, I recommend that you do it in parts.
I create a query and store it in a variable called $movement.
Then I link it to the other query like so:
in joinSub I pass the previous query that I made here $movement, then I put an alias to the table, I put 'movement' so that everything is homogeneous and then I join it with the table that will return the final response