You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中d-m-Y格式日期按月份求和price列返回0的问题

解决Laravel中字符串格式日期的月份统计问题

你的date字段存储的是d-m-Y格式的字符串,而非数据库原生的日期类型,Laravel的whereMonth方法仅能识别数据库日期类型字段,所以直接调用会匹配不到数据,结果始终为0。

以下是几种可行的解决方法:

  • 使用DB::raw截取字符串中的月份部分进行匹配

    $total = Products::where(DB::raw('SUBSTRING(date, 4, 2)'), '01')
        ->sum('price');
    

    由于你的日期格式是日-月-年,月份位于字符串的第4到第5位(从1开始计数),通过SUBSTRING截取后与'01'匹配,即可筛选出所有1月的数据并求和。

  • 将字符串日期转换为数据库日期类型后再匹配

    $total = Products::whereMonth(DB::raw('STR_TO_DATE(date, "%d-%m-%Y")'), 1)
        ->sum('price');
    

    利用MySQL的STR_TO_DATE函数把字符串格式的日期转换为数据库可识别的日期类型,之后就能正常使用whereMonth方法匹配月份为1的数据,这种方式更通用,便于后续进行其他日期相关操作。

  • 最优方案:修改表结构,将date字段类型改为date或datetime,这样后续所有Laravel内置的日期查询方法都能直接使用,无需额外处理字符串转换。

内容的提问来源于stack exchange,提问作者sally

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 10:45:25