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

Laravel中获取近7天每日数据库数据的问题求助

解决获取近7天数据的问题

先给你几个排查和修复的方向,帮你定位问题:

  • 确认时区是否统一
    Laravel的now()用的是config/app.php里配置的时区,如果数据库saledate字段存储的是另一个时区的时间(比如UTC),就会导致日期计算偏差。你可以把查询里的时间转换为数据库的时区,比如假设数据库用UTC:

    $sevenDaysAgo = Carbon::now()->subDays(7)->startOfDay()->setTimezone('UTC');
    

    或者直接把Laravel的时区和数据库设成一致,从根源避免这类问题。

  • 检查saledate的字段类型
    如果数据库里saledate是字符串类型(比如varchar),whereDate方法无法正确解析比较,会导致筛选失效。你需要把字段改成date或datetime类型,或者用字符串格式的日期来比较:

    $sevenDaysAgo = Carbon::now()->subDays(7)->startOfDay()->toDateString();
    ->where('saledate', '>=', $sevenDaysAgo)
    
  • 优化代码并调试SQL
    你定义了$sevendays变量但没用到,可以删掉冗余代码。另外用toSql()查看实际执行的SQL,直接在数据库里跑一遍,就能明确是筛选条件不对还是数据本身的问题:

    $sevenDaysAgo = Carbon::now()->subDays(7)->startOfDay();
    
    $dairymilksaleweek = customermilksale::selectRaw(
        'saledate as startdate, 
         SUM(buffalomilk) as totalbmilk, 
         SUM(a2milk) as totala2milk, 
         SUM(jerseymilk) as totaljmilk, 
         SUM(totalmilk) as totalmilk'
    )
    ->where('saledate', '>=', $sevenDaysAgo)
    ->groupBy('saledate')
    ->orderBy('saledate');
    
    // 调试用,查看生成的SQL
    dd($dairymilksaleweek->toSql());
    
    $dairymilksaleweek = $dairymilksaleweek->get();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:05:18