Laravel область для оплаченных счетов с умноженными столбцами - PullRequest
0 голосов
/ 19 апреля 2020

Это должно быть достаточно просто, но я не могу разобраться с этим. У меня есть таблица счетов и таблица платежей. В счете много платежей, и общая сумма платежа рассчитывается с использованием original_amount * exchange_rate. Все, что мне нужно сделать, это разметить оплаченные счета. Вот код:

In Invoice. php

public function payments() {

    return $this->hasMany(Payment::class);
}


public function scopePaid($query) {
    return $query->whereHas('payments', function (Builder $query)) {

        // This is the pseudo code part....
        $query->where('original_amount' * 'exchange_rate', '>=', $invoice->amount_due);

    }

Я просто sh это было так просто, но, конечно, это не работает. Я всегда мог создать функцию stati c, которая перебирает счета-фактуры, проверяя их оплаченный статус, и возвращает коллекцию оплаченных счетов-фактур, но это не то, что является областью действия, и я надеюсь найти что-то более элегантное, чем это. Есть мысли?

Спасибо!

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

Используйте groupBy и havingRaw:

$query->groupBy('invoice_id')
      ->havingRaw('SUM(original_amount * exchange_rate) >= invoices.amount_due');
0 голосов
/ 23 апреля 2020

Спасибо @TsaiKoga. Вы действительно Мастер!

Просто чтобы уточнить, окончательная версия:

public function scopePaid1($query) {
    return $query->whereHas('payments', function (Builder $query){
        return $query->groupBy('invoice_id')
            ->havingRaw('SUM(original_amount * exchange_rate) >= invoices.amount_due');
    });
}

И важно настроить вашу базу данных, следуя этому совету.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...