Laravel范围的已付款发票乘以列



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

在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);
}

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

谢谢!

使用groupByhavingRaw:

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

谢谢@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');
});
}

按照这个建议配置数据库是很重要的。

最新更新