Я работаю над несколькими таблицами, которые связаны довольно сложными отношениями (которые я пытаюсь очистить, но мне все еще нужны отчеты, сделанные из данных через мой Laravel).
В настоящее время я могу получить данные, используя следующий запрос SQL, в свою базу данных MySQL:
SELECT
customers.id,
customers.customer_name,
SUM(shipments.balance) AS shipmentBalance
FROM customers
LEFT JOIN shipments
ON customers.id = shipments.bill_to
AND balance > (SELECT IFNULL(SUM(payments_distributions.amount),0)
FROM payments_distributions
WHERE payments_distributions.shipment_id = pro_number)
GROUP BY customers.id, customers.customer_name
ORDER BY shipmentBalance DESC
LIMIT 5;
Я просто не уверен, как правильно переписать его в операторы whereRaw или DB :: raw, которые требуются Laravel Eloquent, поскольку мои предыдущие попытки потерпели неудачу.
Обновление
Вот наиболее близкое решение, которое я пробовал:
DB::table('customers')
->select('customers', DB::raw('SUM(shipments.balance) AS shipmentBalance'))
->leftJoin(
DB::raw('
(select shipments
ON customers.id = shipments.bill_to
AND balance > (SELECT IFNULL(SUM(payments_distributions.amount),0)
FROM payments_distributions
WHERE payments_distributions.shipment_id = pro_number)'))
->groupBy('customers.id')
->orderByRaw('shipmentBalance DESC')
->limit(5)
->get();
Обновление 2
Редактировать для Dom:
Используя все как есть с вашим ответом, я получаю следующий ответ:
SQLSTATE[42S22]: Column not found: 1054 Unknown column '' in 'on clause' (SQL: select customers.id, customers.customer_name,SUM(s.balance) AS shipmentBalance from `customers` left join `shipments` as `s` on `customers`.`id` = `s`.`bill_to` and s.balance > (SELECT IFNULL(SUM(payments_distributions.amount),0) FROM payments_distributions WHERE payments_distributions.shipment_id = s.pro_number) = `` group by `customers`.`id`, `customers`.`customer_name` order by SUM(s.balance) DESC limit 5)
Но если я удалю этот раздел, он откроет страницу и клиентов (хотя и в неправильном порядке, поскольку я удалил один из необходимых компонентов:
$join->on(DB::raw('s.balance >
(SELECT IFNULL(SUM(payments_distributions.amount),0)
FROM payments_distributions
WHERE payments_distributions.shipment_id = s.pro_number)
'));
Могу ли я вам чем-то помочь, чтобы это конкретное утверждение работало с вашим полным ответом?