У меня есть две модели Order
hasMany Revenues
, и я хотел бы получить все заказы, у которых есть долги, которые нужно забрать, это означает, что сумма всех оплаченных доходов меньше, чем цена заказа.
Order
имеет price_to_customer
, Revenue
имеет is_paid
и value
.
Я хочу получить все заказы, в которых сумма его оплаченных доходов меньше price_to_customer
.
Самым близким к успеху, которого я достиг, был следующий запрос
$orders = App\Order::leftJoin(DB::raw('(SELECT order_id, is_paid, SUM(price) as paid FROM revenues GROUP BY order_id) AS revs'), function ($join) {
$join->on('revs.order_id', '=', 'orders.id')->where('revs.is_paid', true);
})->having('paid', '<', 'price_to_customer');
Но точно после последнего предложения having()
возвращает пустой массив. Без этого все в порядке, и атрибут paid
успешно внедряется в экземпляры Order
с его правильным значением. Почему последнее условие фильтрации не работает? Чего мне не хватает?
Большое спасибо заранее!