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

使用Laravel Eloquent ORM删除30天以上旧数据的正确性及无匹配场景咨询

写法正确性说明

你写的代码逻辑是正确的,完全可以实现删除30天以上旧数据的需求,不过可以做个小优化:

  • whereDate方法会提取created_at字段的日期部分做匹配,会跳过该字段的索引(如果有加索引的话),如果你的created_at是带时分秒的datetime类型,直接用where做完整时间匹配性能更好,优化后写法如下:
App\MyTable::where('created_at', '<=', now()->subDays(30))->delete();

两种写法的执行效果完全一致,优化后的版本对大表更友好。

无匹配记录时的运行表现

没有查询到符合删除条件的记录时,代码会平稳运行,不会抛出异常:

  • 此时delete()方法会返回整数0,代表本次操作影响的数据行数为0,你可以接收这个返回值判断是否有数据被删除,做后续的逻辑处理。
  • 额外提醒:如果你的MyTable模型开启了软删除功能,上述写法只会执行软删除(给deleted_at字段赋值),如果需要永久删除数据需要替换为forceDelete()方法。

内容的提问来源于stack exchange,提问作者GTS Joe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:18:00