Laravel中如何用whereIn结合whereDay筛选指定工作日数据
当然可以实现!
你说的这种用whereIn结合日期筛选的思路完全可行,这正是Laravel查询构造器为日期场景优化的地方之一。
具体实现代码
假设你的模型是MonthlyRecord(记得换成你实际的模型名称),直接看代码最直观:
// 你的工作日天数数组 $workDays = [1,2,3,4,5,8,9,10,11,12,15,16,17,18,19,22,23,24,25,26,29,30,31]; $targetYear = 2024; // 替换成你要查询的年份 $targetMonth = 10; // 替换成你要查询的月份 // 构建查询 $filteredRecords = MonthlyRecord::query() // 先锁定目标年月 ->whereYear('Clock_Day', $targetYear) ->whereMonth('Clock_Day', $targetMonth) // 再匹配工作日天数:提取日期的"日"部分,用whereIn匹配数组 ->whereIn(\DB::raw('DAY(Clock_Day)'), $workDays) ->get();
为什么这么写?
whereYear和whereMonth是Laravel提供的快捷方法,会自动生成对应的SQL日期函数条件,比手动写DATE_FORMAT更简洁不易出错DB::raw('DAY(Clock_Day)')会从Clock_Day字段中提取出日期的“日”部分(比如2024-10-08会被提取成8),然后用whereIn和你的工作日数组做匹配,精准筛选出当月的工作日数据
如果你的Clock_Day字段是标准的date或datetime类型,这个查询会非常高效,数据库也能利用日期相关的索引(如果有的话)。
内容的提问来源于stack exchange,提问作者Madhu Nair
相关产品推荐
相关产品推荐

