答案是使用 wheredate 和 whereMonth 方法可按日期或月份筛选数据,如 User::wheredate(‘created_at’, ‘2024-04-05’) 查询指定日期记录,User::whereMonth(‘created_at’, 5) 查询 5 月数据,支持比较操作和链式组合条件。

在 laravel 的 Eloquent 模型中,你可以直接使用 whereDate 和 whereMonth 方法来对日期字段进行条件查询。这些方法属于 Laravel 查询构造器的一部分,适用于处理 mysql 中的 DATE、DATETIME 类型字段。
whereDate 使用方法
当你需要根据日期(年-月-日)筛选数据时,比如查找某一天创建的所有用户:
User::whereDate('created_at', '2024-04-05')->get();
这会生成类似 SQL:
SELECT * FROM users WHERE DATE(created_at) = '2024-04-05';
你也可以使用比较操作符:
User::whereDate('created_at', '>=', '2024-01-01')->get();
whereMonth 使用方法
如果你只想按月份筛选,比如查找所有在 5 月注册的用户:
User::whereMonth('created_at', '5')->get();
支持补零写法,以下等价:
whereMonth('created_at', 5)whereMonth('created_at', '05')
也支持比较操作:
User::whereMonth('created_at', '>=', 3)->get(); // 第二季度及以后
组合使用多个日期条件
你可以链式调用这些方法实现更复杂的查询,例如查找 2024 年 4 月注册的用户:
User::whereYear('created_at', 2024) ->whereMonth('created_at', 4) ->get();
或者结合 whereDate 精确到天:
User::whereDate('created_at', '>=', '2024-04-01') ->whereDate('created_at', '<=', '2024-04-30') ->get();
注意事项
- 这些方法底层调用的是 MySQL 的 DATE() 或 MONTH() 函数,因此会影响索引使用效率,大数据量下建议配合日期范围优化。
- 字段必须是合法的日期或时间类型,如
created_at、updated_at或自定义的 datetime 字段。 - 如果使用了访问器(accessor)修改了日期格式,需注意原始字段仍要可被数据库函数处理。
基本上就这些,Laravel 的 whereDate 和 whereMonth 让日期查询变得非常直观和简洁。


