Mysql
 sql >> Database >  >> RDS >> Mysql

Domanda eloquente di Laravel

Questa non è la risposta completa ma è vicina. Non importa come lavoro i dati, però, non riesco a capire come stai arrivando con cash_has . Inoltre lo sto mantenendo SQL grezzo perché ritengo che sarebbe più utile e non dovrebbe essere difficile riconvertirlo in generatore di query. Inoltre, non conosco i nomi esatti delle colonne, quindi potresti dover correggere alcuni di questi.

SELECT
    COALESCE(outlets_admin.name, outlets.name) AS outlet, 
    COALESCE(boys_admin.name, boys.name) AS delivery_boy,
    SUM(IF(cm.source_type = 'admin', amount, 0)) AS cash_taken,
    SUM(IF(cm.source_type = 'deliveryBoy', amount, 0)) AS cash_returned,
    SUM(IF(cm.source_type = 'admin', amount, 0)) - SUM(IF(cm.source_type = 'deliveryBoy', amount, 0)) AS cash_has
FROM delivery_cash_manages cm
LEFT JOIN outlets ON outlets.id = cm.destination_id AND cm.source_type = 'deliveryBoy'
LEFT JOIN delivery_boys boys ON boys.id = cm.source_id AND cm.source_type = 'deliveryBoy'
LEFT JOIN outlets outlets_admin ON outlets_admin.id = cm.source_id AND cm.source_type = 'admin'
LEFT JOIN delivery_boys boys_admin ON boys_admin.id = cm.destination_id AND cm.source_type = 'admin'
WHERE COALESCE(outlets.id, outlets_admin.id) = '2'  #  This is where you plug in your $outlet_id
GROUP BY outlet, delivery_boy

Il motivo per cui ricevi un errore con la tua query è che se raggruppi per qualsiasi cosa, devi raggruppare per tutto ciò che selezioni che non sono colonne aggregate (funzioni come sum, max, avg).