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

使用Eloquent查询指定日期时段预约总客数返回null如何解决?

问题排查

1. 方法未返回结果

你当前代码在组装完$hours数组后没有写return语句,接口自然返回null,这是最直接的原因。

2. 查询方法使用错误

whereDate()是Laravel提供的日期查询辅助方法,作用是仅匹配日期字段的年月日部分,你传入完整的Y-m-d H:i:s格式时间,它会自动截断为Y-m-d进行匹配,无法精确匹配到对应小时的预约记录。
如果要精确匹配到时分秒的时间点,直接用普通where()条件即可。

3. 可能存在的时区不匹配问题

需要确认你的Laravel配置文件config/app.php中的timezone设置、数据库时区、Carbon创建时间所用的时区三者一致,否则会出现时间偏移导致匹配不到数据。

4. 24小时制时间转换问题

根据你的补充说明,前端时间选择器返回的24小时制12:00会被Eloquent识别为00:00,需要先打印$data['hours']的入参,确认每个小时项的格式是否符合你的预期,避免入参本身就存在转换错误。


修复后的代码

public function getSeats() {
    
    $data = request()->validate([
        'date' => 'required',
        'hours' => 'required|array',
        'place_id' => 'required'
    ]);

    $hours = [];

    foreach($data['hours'] as $h) {
        // 可临时打印确认时间格式是否正确
        // dd($data['date'].' '.$h);
        $targetTime = Carbon::parse($data['date'].' '.$h);

        $count = Reservation::where('place_id', $data['place_id'])
            ->where('date', $targetTime->toDateTimeString())
            ->sum('guests');

        $hours[] = (object) [
            'hour' => $h,
            'guests' => $count
        ];
    }

    // 必须添加返回语句
    return response()->json($hours);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:27:04