В моем приложении Laravel 5.6 установлены следующие отношения.
Purchase belongs to many Invoice
Invoice belongs to many Purchase
Invoice belongs to many Payment
Payment belongs to many Invoice
Эти отношения устанавливаются с помощью сводных таблиц.
Я хочу найти только покупки с нулевыми платежами по счетам.
В моем тесте у меня есть одна покупка, я приложил два счета к этой покупке, и я приложил один платеж к каждому из этих счетов. Один платеж имеет сумму 100, другой - 0.
Чтобы мой тест прошел, запрос не должен возвращать результатов, однако он этого не делает, он постоянно возвращает созданную мной покупку.
Это вопрос, который я написал:
Purchase::whereHas('invoices.payments', function ($q) {
return $q->where('amount', '<=', 0);
})->get();
Я также пробовал:
Purchase::whereDoesntHave('invoices.payments', function ($q) {
return $q->where('amount', '>', 0);
})->get();
Я здесь что-то не так делаю? Я неправильно понимаю возможности WhereHas?
Любая помощь будет принята с благодарностью, спасибо.
dd(Purchase::whereDoesntHave('invoices.payments', function ($q) { return $q->where('amount', '>', 0); })->toSql())
- person IndianCoding   schedule 13.12.2018select * from `purchases` where exists (select * from `invoices` inner join `invoice_purchase` on `invoices`.`id` = `invoice_purchase`.`invoice_id` where `purchases`.`id` = `invoice_purchase`.`purchase_id` and not exists (select * from `payments` inner join `invoice_payment` on `payments`.`id` = `invoice_payment`.`payment_id` where `invoices`.`id` = `invoice_payment`.`invoice_id` and `amount` > ? and `payments`.`deleted_at` is null) and `invoices`.`deleted_at` is null) and `purchases`.`deleted_at` is null
- person Lawrence Dawson   schedule 13.12.2018