Tengo 2 tablas: facturas y coletes. Cuando creo la página de vista para la factura, quiero que todos los coletes estén numerados allí y su totaleuro sumado
básicamente debería verse algo como esto:
invoiceID coleteID TotalEuro(Of Colete) 1 1 100 2 200 3 400 Total 700 2 4 200 5 300 6 500 Total 1000Mi consulta se ve así
$sum = DB::table('coletes') ->join('invoices','coletes.invoice_id','=','invoices.id') ->select(DB::raw(' SUM(coletes.totaleuro) as totaleuro', )) ->get();Pero en lugar de devolver factura1 total: 700 factura2 total: 1000
Acabo de obtener total: 1700
¿Alguien tiene alguna idea de cómo resolver esta consulta?
En tu consulta estas considerando que todos los coletes pertenecen a una sola factura. necesita usar group by para obtener el total del nivel de factura
$sum = DB::table('coletes') ->join('invoices','coletes.invoice_id','=','invoices.id') ->select(DB::raw(' SUM(coletes.totaleuro) as totaleuro', ))->groupBy('coletes.invoice_id') ->get();por lo que devolverá dos filas según su ejemplo
Consulta MySQL para su ejemplo
CREATE TABLE coletes ( id INTEGER PRIMARY KEY, invoice_number INTEGER NOT NULL, product_id INTEGER not NULL, amount INTEGER not null ); -- insert INSERT INTO coletes VALUES (0001, 1,1, 100); INSERT INTO coletes VALUES (0002, 1,2, 200); INSERT INTO coletes VALUES (0003, 1,3, 400); INSERT INTO coletes VALUES (0004, 2,4, 200); INSERT INTO coletes VALUES (0005, 2,5, 300); INSERT INTO coletes VALUES (0006, 2,6, 500); -- fetch SELECT invoice_number, sum(amount) FROM coletes group by invoice_number; Output: invoice_number sum(amount) 1 700 2 1000