当行过期时运行方法或命令Laravel

时间:2019-03-15 09:51:46

标签: laravel

我有一个包含用户出版物的表,当用户发布出版物时,他选择了该出版物在平台上仍可见的日期,我想要一种方法来翻转出版物的状态,即现在到现在不再显示(发布日期等于或大于日期系统),我知道cronjob的方法,但是我想问一下是否有更好的方法可以这样做,因为我认为cronjob的方法是这样做不好,我将不得不每分钟运行一次我不愿意执行的命令,我只需要想法而不是代码。

谢谢。

1 个答案:

答案 0 :(得分:2)

不要在数据库上存储active标志。在您的情况下,active是派生属性,派生属性不应真正存储为列,更不用说active将基于日期,因此它在功能上不直接依赖于主键。也违反了第二范式。这两个原因通常会导致数据异常,而您要执行的计划任务基本上是在解决这些异常问题。

我建议的方法是使用雄辩的模型属性和如下所示的属性变异器:

class Publication extends Model {
     protected $appends = [ 'active' ];

     public function getActiveAttribute() {
         return $this->activeUntil < Carbon::now(); //Still active
     }
}

这样,您的模型就包含了active属性,该属性是通过雄辩而计算的,并且不存储在数据库中。