繁体   English   中英

从 dmY 日期格式 laravel 计算月份的列总和

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM