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

Lumen中如何基于created_at的日期维度使用firstOrNew避免重复插入?

问题根因

你使用的created_at字段为datetime类型,存储内容包含时分秒,而你传入匹配的Carbon::today()(或date('Y-m-d'))会被解析为当日0点的时间值(例如2021-09-23 00:00:00),无法和数据库中类似2021-09-23 14:42:13的带具体时间的记录全等匹配,因此每次都会触发新增逻辑。

解决方法

方法1:用日期匹配查询替代全等匹配

直接使用查询构造器的whereDate方法匹配created_at的日期部分,查询到对应记录就复用,没有就初始化新模型对象:

$tableObj = User::whereDate('created_at', Carbon::today())->first() ?? new User();
$tableObj->mobile = '5457874545';
$tableObj->save();

注意:如果你的业务允许同一天存在多条记录,需要在查询条件中补充其他唯一标识字段,避免错误更新第一条匹配的记录。

方法2:新增专用日期字段优化匹配(适合高频按天查询场景)

如果业务经常需要按天匹配数据,可以在用户表新增created_date字段(类型为date),写入数据时同步存储当前日期,后续直接用该字段做firstOrNew的匹配条件:

$tableObj = User::firstOrNew([
    'created_date' => Carbon::today()->toDateString()
]);
$tableObj->mobile = '5457874545';
$tableObj->save();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:36:03