php - 我如何计算laravel中特定id的总金额?
问题描述
我有两张表 invoices 和 invoice_items。我想要的是汇总每个发票 ID 的金额并显示在我的视图中。
发票表
- ID
invoice_items 表
ID
invoice_id
数量
我想对特定发票 ID 的金额列求和。我是 laravel 的新手,所以我如何用 laravel eloquent 做到这一点。
解决方案
因为您使用的是一对多。
解决方案1:
您可以使用with
并groupBy
看起来像这样:
$invoice = Invoice::with(['invoice_items' => function($query){
$query->groupBy('invoice_id')->select('invoice_id', DB::raw('SUM(amount) AS amount_sum'));
}])->get();
解决方案2:
或者您可以使用leftjoin
并SUM
看起来像这样:
$invoice_query = InvoiceItem::groupBy('invoice_id')->select("invoice_id", DB::raw('SUM(amount) AS amount_sum'));
Invoice::leftjoin(DB::raw("({$invoice_query->toSql()}) AS ii"), 'ii.invoice_id', '=', 'invoices.id')
->mergeBindings($invoice_query->getQuery())
->select('invoices.*', 'amount_sum')
->get();
解决方案3:
使用访问器:在您的发票模型中:
protected $appends = ['amount_sum'];
public function getAmountSumAttribute()
{
return $this->invoice_items()->where('invoice_id', $this->id)->sum('amount');
}
所以你可以得到金额的总和:
Invoice::all()->toJSON();
推荐阅读
- python - 如何在 Windows 上使用 Python 创建 tar.gz 时设置执行权限
- php - 无法在 prestashop Context::getContext()->cookie 中找到 cookie 值,但它显示在 $_COOKIE 中?
- progressive-web-apps - Pwa venia 主题产品页面滑块不起作用
- java - kotlin:检查一个类是否是对象类?
- android - 将我的屏幕内容远程显示到其他设备
- swift - 按下 tableviewCell 中的按钮并执行另一个控制器
- php - 通过 Internet 与我的远程朋友共享系统
- java - 在选项卡式窗格中添加标题
- firebase - 如何从 Angular 项目中的 firebase firestore 中的集合中获取一个简单的字符串
- javascript - 如何使用angularjs内联过滤器比较json数组中键的完整值