Запрос Laravel, в котором поле меньше суммы другого поля в связанной таблице (полиморфная связь)

#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 что эта часть в порядке, может быть, у вас там 2 net_total поля ->where('invoices.net_total', '>' ,'transactions_sum_amount')

3. нет, это тоже не работает. Вот скриншот результатов. Первый из них правильный. Но второй не должен был прийти. prnt.sc/1favj7u

4. @Thaha используйте ->Столбец whereColumn(«общий объем сети»,»>>», «количество транзакций»)

5. @JohnLobo выдает эту ошибку. Столбец не найден: 1054 Неизвестный столбец «транзакции_sum_amount» в предложении where