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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:19:13