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
相关产品推荐
相关产品推荐

