Мне нужно перечислить пользователей, чьи платежи ниже общей суммы, которые должны быть оплачены в их счетах, или пользователей, имеющих счета без совершенных платежей.
Структура моей базы данных выглядит следующим образом:
- Контакты - Счета-фактуры - Payment_Invoices (много лет много) - Платежи
Прямо сейчас я Я могу получать контакты только с платежами, меньшими, чем сумма, в счетах, но не для тех, у которых нет платежей.
$data = Contact::select('contacts.*', 'invoices.totals->total as total',
DB::raw("IFNULL(SUM(payments.rate), 0) AS paid"),
DB::raw("IFNULL(COUNT(payments.id), 0) AS pays"))
->where('contacts.company_id', '=', $companyId)
->rightJoin('invoices', 'invoices.contact_id', 'contacts.id')
->rightJoin('payment_invoices', 'payment_invoices.invoice_id', 'invoices.id')
->rightJoin('payments', 'payments.id', 'payment_invoices.payment_id')
->havingRaw('paid < total')
->orWhereHas('invoices',function ($query) {
$query->whereDoesntHave('payments');
})
->get();
Я также попытался orHavingRaw ('pays = 0') вместо orWhereHas заявление, но не удача.
Любая помощь будет оценена.