我有两列,分别叫做price和date,所以我想对月份为01的price的总和求和:
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
i5desfxk1#
"%d-%m-%Y"
str_to_date
$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进行搜索,同时维护模型和所有关系加载日期以供其他用途。
months 1 -> 12
bweufnob2#
使用DB原始查询,首先使用STR_TO_DATE方法将字符串日期转换为MySQL日期格式,然后使用MONTH函数添加条件以选择基于月份的结果。
STR_TO_DATE
MONTH
Products::where(DB::raw("(MONTH(STR_TO_DATE(date,'%d-%m-%y')))"),1)->sum('price')
此外,为了可重复使用,您可以使用laravel scope在产品型号中添加以下方法
public function scopeByMonth($query,$month) { $query->where(DB::raw("(MONTH(STR_TO_DATE(date,'%d-%m-%y')))"),$month); }
并且查询将
Products::byMonth(1)->sum('price');
2条答案
按热度按时间i5desfxk1#
"%d-%m-%Y"
解析日期,您可以阅读更多关于str_to_date
函数的信息:https://www.w3schools.com/sql/func_mysql_str_to_date.asp现在,您可以按
months 1 -> 12
进行搜索,同时维护模型和所有关系加载日期以供其他用途。bweufnob2#
使用DB原始查询,首先使用
STR_TO_DATE
方法将字符串日期转换为MySQL日期格式,然后使用MONTH
函数添加条件以选择基于月份的结果。此外,为了可重复使用,您可以使用laravel scope
在产品型号中添加以下方法
并且查询将