我一直在购买购物车应用程序,现在我遇到了以下问题..
有用户,产品和购物车对象。
- 购物车表仅包含以下列:“id”,“user_id”,“product_id”和时间戳。
- UserModel“hasMany”购物车(因为用户可以存储多个产品)
- CartModel“belongsTo”用户和CartModel“hasMany”产品。
现在计算我可以调用的总产品:Auth::user()->cart()->count()
。
我的问题是:如何获得此用户购物车中产品的价格(产品列)的SUM()? 我想用Eloquent完成这个,而不是使用查询(主要是因为我相信它更清洁)。
答案 0 :(得分:171)
Auth::user()->products->sum('price');
对于某些Collection
方法,文档稍微有些说明,但除avg()
之外的所有查询构建器聚合似乎都可用,可以在http://laravel.com/docs/queries#aggregates找到。
答案 1 :(得分:35)
这不是你的答案,而是那些来到这里寻找另一个问题的解决方案的人。 我想有条件地得到一列相关表的总和。 在我的数据库中,交易有很多活动 我想从Activities表中获取“amount_total”的总和,其中activities.deal_id = deal.id和activities.status = paid 所以我这样做了。
$query->withCount([
'activity AS paid_sum' => function ($query) {
$query->select(DB::raw("SUM(amount_total) as paidsum"))->where('status', 'paid');
}
]);
它返回
"paid_sum_count" => "320.00"
在Deals属性中。
现在这是我想要得到的总和而不是计数。
答案 2 :(得分:6)
我尝试过做类似的事情,这让我花了很多时间才弄清楚了collect()函数。所以你可以这样做:
collect($items)->sum('amount');
这将为您提供所有项目的总和。
答案 3 :(得分:1)
您可以像这样用雄辩的口才轻松做到
$sum = Model::sum('sum_field')
它将返回一个字段的总和, 如果在上面应用条件也很简单
$sum = Model::where->('status','=','paid')->sum('sum_field')
答案 4 :(得分:0)
还使用查询生成器
DB::table("rates")->get()->sum("rate_value")
获取表费率内所有费率值的总和。
获取用户产品的总和。
DB::table("users")->get()->sum("products")
答案 5 :(得分:0)
您可以将其作为 UserModel 属性传递。将此代码添加到 UserModel。
public function getProductPriceAttribute(){
return $this->cart()->products()->sum('price');
}
我假设是这样的:
然后你可以像这样得到产品的总价:
Auth::user()->product_price
答案 6 :(得分:0)
对于只想快速将列中值的总总和显示到刀片视图的人,您可以这样做:
{{ \App\Models\ModelNameHere::sum('column_name') }}
您也可以针对平均值执行此操作:
{{ \App\Models\ModelNameHere::avg('column_name') }}
最低:
{{ \App\Models\ModelNameHere::min('column_name') }}
最大:
{{ \App\Models\ModelNameHere::max('column_name') }}
要获取表的计数:
{{ \App\Models\ModelNameHere::count() }}