首页 > 解决方案 > 具有相乘列的已付款发票的 Laravel 范围

问题描述

这应该很简单,但我无法理解它。我有一张发票表和一张付款表。一张发票有许多付款,总付款金额使用 original_amount * exchange_rate 计算。我需要做的就是确定已付发票的范围。这是代码:

在发票.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);

    }

我只是希望它那么简单,但这当然行不通。我总是可以创建一个静态函数,循环检查发票的付款状态并返回一组已付款发票,但这不是范围,我希望找到比这更优雅的东西。有什么想法吗?

谢谢!

标签: mysqllaraveleloquent

解决方案


使用groupByhavingRaw

$query->groupBy('invoice_id')
      ->havingRaw('SUM(original_amount * exchange_rate) >= invoices.amount_due');

推荐阅读