Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Laravel eloquente Frage

Dies ist nicht die vollständige Antwort, aber es ist nah dran. Egal wie ich die Daten bearbeite, ich kann nicht herausfinden, wie Sie auf cash_has kommen . Außerdem behalte ich rohes SQL, weil ich glaube, dass es hilfreicher wäre und es nicht schwierig sein sollte, es wieder in den Abfrageersteller umzuwandeln. Ich kenne auch die genauen Spaltennamen nicht, also müssen Sie einige davon korrigieren.

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

Der Grund, warum Sie bei Ihrer Abfrage einen Fehler erhalten, ist, dass Sie, wenn Sie nach irgendetwas gruppieren, nach allem gruppieren müssen, was Sie auswählen, was keine aggregierten Spalten sind (Funktionen wie sum, max, avg).