php 从d-m-Y日期格式laravel开始计算月份的列的总和

bq9c1y66  于 2022-12-28  发布在  PHP
关注(0)|答案(2)|浏览(122)

我有两列,分别叫做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

i5desfxk

i5desfxk1#

    • 因为您无法更改内容的格式,我们必须从数据库中选择Raw:**
  • 步骤1)是使用您的格式"%d-%m-%Y"解析日期,您可以阅读更多关于str_to_date函数的信息:https://www.w3schools.com/sql/func_mysql_str_to_date.asp
  • 步骤2)我们从解析的日期中获取月份
  • 步骤3)我们将解析后的日期指定为"modified_date"或任何您想重命名的名称。
  • 步骤4)我们根据结果进行选择和求和。
    • 这应该是最终结果:**
$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进行搜索,同时维护模型和所有关系加载日期以供其他用途。

bweufnob

bweufnob2#

使用DB原始查询,首先使用STR_TO_DATE方法将字符串日期转换为MySQL日期格式,然后使用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');

相关问题