mysql - 具有相乘列的已付款发票的 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);
}
我只是希望它那么简单,但这当然行不通。我总是可以创建一个静态函数,循环检查发票的付款状态并返回一组已付款发票,但这不是范围,我希望找到比这更优雅的东西。有什么想法吗?
谢谢!
解决方案
使用groupBy
和havingRaw
:
$query->groupBy('invoice_id')
->havingRaw('SUM(original_amount * exchange_rate) >= invoices.amount_due');
推荐阅读
- bash - 如何将特殊字符 \(反斜杠)替换为 -(破折号)
- java - xAxis、yAxis 和 zAxis 未封装。它们是特殊关键字吗?
- c++ - 有没有办法在一组值中随机添加或减去两个或更多特定数字?
- php - 通过 SQL 检索所有库存中没有图像的 WooCommerce 产品
- javascript - 下载链接在 Internet Explorer 上不起作用
- java - 在:reobfJar java.util.zip.ZipException 处编译 mod 的问题:重复条目
- arduino - 有没有办法在构建过程中使用 GitVersion 来“版本标记”一个 Arduino 项目?
- java - 如何使用来自单独线程的数据将文本附加到 JTextArea
- html - 设置我的部分的高度等于文本内容,忽略 SVG 的高度
- python - Camelot:使用“table_regions”参数返回“太多值无法解包(预期 4)”