[英]Count sum of column where month from d-m-Y date format laravel
我有两列称为价格和日期,所以我想对月份为 01 的总价格求和:
price | date
-------------------
200 | 01-01-2022
100 | 09-01-2022
400 | 01-03-2022
120 | 01-06-2022
这是我的代码:
$total = Products::whereMonth('date', '=', 1)->sum('price');
但它没有显示任何数据它只显示 0
因为你不能改变事物的格式,我们必须从数据库中选择 Raw:
步骤 1) 是使用您的格式"%d-%m-%Y"
解析日期,您可以在str_to_date
function 上阅读更多信息: https://www.w3schools.com/sql/func_mysql_str_to_date.asp
步骤 2) 我们从解析的日期中获取月份
第 3 步)我们将解析的日期指定为“modified_date”或您喜欢的任何名称。
步骤 4) 我们 select 并根据结果求和。
这应该是最终结果:
$products = Products::selectRaw('*, month(str_to_date(date, "%d-%m-%Y")) as modified_date')->get();
$total = $products->where('modified_date', 1)->sum('price'));
结果:
300
现在您可以按months 1 -> 12
搜索,同时保留 model 和所有关系加载日期以供其他使用。
用 eloquent 试试这个:
$total = Products::whereMonth('date', '1')->sum('price');
使用 DB 原始查询,首先使用STR_TO_DATE
方法将字符串日期转换为 MySQL 日期格式,然后使用MONTH
function 将条件添加到基于 select 月份的结果。
Products::where(DB::raw("(MONTH(STR_TO_DATE(date,'%d-%m-%y')))"),1)->sum('price')
同样出于可重复使用的目的,您可以使用 laravel scope
在产品 model 中添加以下方法
public function scopeByMonth($query,$month)
{
$query->where(DB::raw("(MONTH(STR_TO_DATE(date,'%d-%m-%y')))"),$month);
}
查询将是
Products::byMonth(1)->sum('price');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.