laravel 雄辩的查询构建器更新自定义时间戳字段而没有任何逻辑

Posted

技术标签:

【中文标题】laravel 雄辩的查询构建器更新自定义时间戳字段而没有任何逻辑【英文标题】:laravel eloquent query builder updating custom timestamp field without any logic 【发布时间】:2017-04-30 18:26:27 【问题描述】:

我在名为expired(boolean)expire_date(timestamp) 的表中有两列。我正在运行一个调度程序来检查优惠券是否在everyMinute() 中过期,同时使用foreach 更新expired 列值,我发现它用今天的日期更改了 expired_date 列值。我发现这很奇怪,或者可能是我搞砸了通过引用传递的东西.. 这是代码

$schedule->call(function () 
            CoursePromotion::where('expired',0)
                ->whereDate('expire_date','<',Carbon::today())
                ->update(['expired' => 1]);
      )->everyMinute();

结果如下,

更新前的数据库

运行php artisan schedule:run 命令后的数据库

谁能告诉我为什么 expired_date 已经更新为今天的日期?

【问题讨论】:

使用Carbon::now(),而不是Carbon::today(),第二个只是返回日期而不是实际时间 【参考方案1】:

检查你的数据库表(有这个'expired_date'列),不确定但同一列的属性有问题。 如果您在“expired_date”列中找到类似“on update CURRENT_TIMESTAMP”的属性,请将其删除并检查。

此外,此“on update CURRENT_TIMESTAMP”属性将在对特定记录执行更新操作时将日期更新为当前开启。

【讨论】:

以上是关于laravel 雄辩的查询构建器更新自定义时间戳字段而没有任何逻辑的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 雄辩与查询构建器的优缺点

Laravel 通过属性获得雄辩的查询构建器关系

雄辩的查询构建器laravel 5.6中的未知列

向 Laravel 查询构建器添加自定义函数

Laravel - 使用 Eloquent 查询构建器在选择中添加自定义列

查询生成器的行为就像雄辩