the*_*ral 92 php relation laravel eloquent
我一直在做一个购物车应用程序,现在我遇到了以下问题..
有一个User,一个Product和一个Cart对象.
- Cart表仅包含以下列:"id","user_id","product_id"和时间戳.
- UserModel"hasMany"购物车(因为用户可以存储多个产品).
- CartModel"belongsTo"用户和CartModel"hasMany"产品.
现在计算我可以调用的总产品:Auth::user()->cart()->count().
我的问题是:如何获得此用户购物车中产品的价格(产品列)的SUM()?
我想用Eloquent完成这个,而不是使用查询(主要是因为我相信它更清洁).
use*_*496 195
Collection
对于某些avg()方法,文档略有说明,但除了Collection可以在http://laravel.com/docs/queries#aggregates上找到之外,所有查询构建器聚合似乎都可用.
ahm*_*ali 46
这不是你的答案,而是那些来到这里寻找另一个问题的解决方案.我想有条件地得到一列相关表的总和.在我的数据库中,交易有许多活动,我想从活动表中获取"amount_total"的总和,其中activities.deal_id = deal.id和activities.status =已付款所以我这样做了.
$query->withCount([
'activity AS paid_sum' => function ($query) {
$query->select(DB::raw("SUM(amount_total) as paidsum"))->where('status', 'paid');
}
]);
Run Code Online (Sandbox Code Playgroud)
它返回
"paid_sum_count" => "320.00"
Run Code Online (Sandbox Code Playgroud)
在Deals属性中.
现在这是我想得到的总和而不是计数.
小智 13
我尝试做类似的事情,在我弄清楚collect()函数之前花了很多时间.所以你可以这样做:
collect($items)->sum('amount');
这将为您提供所有项目的总和.
小智 11
你可以像这样轻松地使用 eloquent
$sum = Model::sum('sum_field');
Run Code Online (Sandbox Code Playgroud)
它会返回一个字段的总和,如果在它上面应用条件也很简单
$sum = Model::where('status', 'paid')->sum('sum_field');
Run Code Online (Sandbox Code Playgroud)
vst*_*har 11
withSum从版本 8 开始, Eloquent 上有一个方法,所以你可以使用这个方法。
Auth::user()->withSum('products', 'price')->products_sum_price;
Run Code Online (Sandbox Code Playgroud)
这不会将所有产品加载到内存中,然后用集合方法求和。相反,它会生成数据库的子查询,因此速度更快并且使用更少的内存。
小智 7
您可以将其作为 UserModel 属性传递。将此代码添加到 UserModel。
public function getProductPriceAttribute(){
return $this->cart()->products()->sum('price');
}
Run Code Online (Sandbox Code Playgroud)
我假设是这样的:
然后你可以得到产品的总价,如下所示:
Auth::user()->product_price
Run Code Online (Sandbox Code Playgroud)
还使用查询生成器
DB::table("rates")->get()->sum("rate_value")
Run Code Online (Sandbox Code Playgroud)
获取表费率内所有费率值的总和。
获得用户产品的总和。
DB::table("users")->get()->sum("products")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
181695 次 |
| 最近记录: |