Laravel中如何查询checkout_at为Null或满足日期条件的数据
问题分析与代码修正
你的需求是查询Attendance模型中满足以下任一条件的数据:
checkout_at字段为Nullcheckout_at不为Null且日期大于等于当前日期
原代码存在的问题
- 语法错误:
date('Y-m-d')->get()写法错误,date()函数返回字符串,无法调用get()方法 - 逻辑隐患:如果查询前还有其他
where条件,直接用orWhere会打乱原有逻辑,导致结果不符合预期
修正后的代码
$query = Attendance::query(); // 如有其他前置查询条件,可在此添加 // 示例:$query->where('user_id', auth()->id()); // 用闭包包住条件组,保证逻辑正确性 $query->where(function ($q) { $q->whereNull('checkout_at') ->orWhereDate('checkout_at', '>=', date('Y-m-d')); }); // 最后调用get()获取查询结果 return $query->get();
关键说明
- 通过闭包包裹两个条件,确保这两个条件是或的关系,同时不会与其他前置查询条件冲突
date('Y-m-d')正确获取当前日期字符串,作为比较值传入orWhereDate- 将
get()方法移至查询构造完成后调用,保证查询正常执行
内容的提问来源于stack exchange,提问作者Mr. Jarvis
相关产品推荐
相关产品推荐

