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

Laravel日期查询需求:无请求日期时返回当日数据

修复Laravel日期查询逻辑问题

原代码的问题在于orWhere会破坏查询逻辑,实际生成的SQL会变成(vehicle_id = ? AND date = ?) OR date = ?,导致vehicle_id的过滤条件被部分忽略,不符合需求。以下是正确的实现方式:

方案一:条件判断拼接查询

// 先固定车辆ID的过滤条件
$query = VehicleTask::where('vehicle_id', $this->driver);

// 根据请求参数动态添加日期条件
if ($request->has('date')) {
    $query->whereDate('date', $request->date);
} else {
    $query->whereDate('date', Carbon::today()->toDateString());
}

$tasks = $query->get();

方案二:使用when方法简化代码

Laravel的when方法可以更简洁地实现条件式逻辑拼接:

$tasks = VehicleTask::where('vehicle_id', $this->driver)
    ->when($request->date, function ($query, $date) {
        return $query->whereDate('date', $date);
    }, function ($query) {
        return $query->whereDate('date', Carbon::today()->toDateString());
    })
    ->get();

补充说明

  • Carbon::today()->toDateString()等价于Carbon::now()->format('Y-m-d'),写法更简洁规范
  • 如果前端传入的date格式不是Y-m-d,需要先做格式转换,比如Carbon::parse($request->date)->toDateString()
  • 两种方案都能保证vehicle_id的过滤条件始终生效,最终生成的SQL为vehicle_id = ? AND date = ?,完全符合需求

内容的提问来源于stack exchange,提问作者Malik Zubair Mukhtar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:32:03