Laravel如何查询未过期数据?MySQL含expires_at字段
解决Laravel中筛选未到期记录的问题
嘿,这个需求很容易实现,只需要在你现有的查询语句基础上,添加一个针对expires_at字段的日期比较条件就行啦!
基础实现方式
直接在查询链中加入where条件,筛选出expires_at大于当前时间的记录:
Model::where('user_id', Auth::user()->id) ->where('expires_at', '>', now()) ->get();
这里的now()是Laravel提供的辅助函数,会自动生成当前时间的datetime格式值,和你的expires_at字段类型完全匹配,而且会遵循项目配置的时区,不用额外处理时区问题。
更语义化的写法
如果你想让代码可读性更强,可以使用Laravel专门为datetime字段提供的whereDateTime方法:
Model::where('user_id', Auth::user()->id) ->whereDateTime('expires_at', '>', now()) ->get();
效果和上面的写法完全一致,但代码意图更清晰。
处理永不过期的情况(可选)
如果你的业务中存在expires_at为null(代表永不过期)的记录,想要把这类记录也包含进来的话,可以嵌套一个条件组:
Model::where('user_id', Auth::user()->id) ->where(function ($query) { $query->where('expires_at', '>', now()) ->orWhereNull('expires_at'); }) ->get();
这样就能同时筛选出“未到期”和“永不过期”的记录啦。
内容的提问来源于stack exchange,提问作者user5405648
相关产品推荐
相关产品推荐

