#sql #laravel #eloquent #laravel-8
Вопрос:
В Laravel пытается запросить таблицу для счетов-фактур (имя таблицы: invoices
), где общая сумма счета-фактуры (имя поля: net_total
) превышает сумму платежей, произведенных по этому счету-фактуре. Он устанавливается как полиморфная связь.
Таблица Счетов-фактур:
public function transactions(){
return $this->morphMany(TransactionAllocation::class, 'doc');
}
Таблица Платежей:
public function doc()
{
return $this->morphTo();
}
Я попробовал запрос, который, похоже, не работает.
Invoice::with('transactions')
->where('net_total', '>' ,'transactions.amount')
->get();
Я попробовал следующее в соответствии с ответом ниже, который дает мне сумму отношений, но условие where не выполняется
Invoice::withSum('transactions', 'amount')
->where('net_total','>','transactions_sum_amount')
->get();
Скриншот результата — https://prnt.sc/1favj7u
Второй массив не должен был появиться, так как он не соответствует условию where.
Есть какие-нибудь советы по поводу того, что я упускаю?
Ответ №1:
Поскольку у вас будет много транзакций, как вы сказали, это часть, отсутствующая в запросе.
Вы можете попробовать что-то с withSum, например
InvoiceTest::withSum('transactions', 'amount')
->havingRaw('transactions_sum_amount < invoices.net_total')
->get();
Комментарии:
1. это помогает свести сумму. Но это не удовлетворяет условию «где». Он выводит строки, в которых сумма net_total также меньше или равна сумме.
2. хорошо, так
transactions_sum_amount
что эта часть в порядке, может быть, у вас там 2net_total
поля->where('invoices.net_total', '>' ,'transactions_sum_amount')
3. нет, это тоже не работает. Вот скриншот результатов. Первый из них правильный. Но второй не должен был прийти. prnt.sc/1favj7u
4. @Thaha используйте ->Столбец whereColumn(«общий объем сети»,»>>», «количество транзакций»)
5. @JohnLobo выдает эту ошибку. Столбец не найден: 1054 Неизвестный столбец «транзакции_sum_amount» в предложении where