Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Laravel consulta eloquente


Esta não é a resposta completa, mas está perto. Não importa como eu trabalho com os dados, não consigo descobrir como você está criando cash_has . Também estou mantendo o SQL bruto porque sinto que seria mais útil e não deveria ser difícil converter de volta para o construtor de consultas. Eu também não sei os nomes exatos das colunas, então você pode ter que corrigir alguns deles.
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

O motivo pelo qual você está recebendo um erro com sua consulta é que, se você agrupar por qualquer coisa, precisará agrupar por tudo o que selecionar que não são colunas agregadas (funções como soma, max, avg).