我有一个包含用户出版物的表,当用户发布出版物时,他选择了该出版物在平台上仍可见的日期,我想要一种方法来翻转出版物的状态,即现在到现在不再显示(发布日期等于或大于日期系统),我知道cronjob
的方法,但是我想问一下是否有更好的方法可以这样做,因为我认为cronjob
的方法是这样做不好,我将不得不每分钟运行一次我不愿意执行的命令,我只需要想法而不是代码。
谢谢。
答案 0 :(得分:2)
不要在数据库上存储active
标志。在您的情况下,active
是派生属性,派生属性不应真正存储为列,更不用说active
将基于日期,因此它在功能上不直接依赖于主键。也违反了第二范式。这两个原因通常会导致数据异常,而您要执行的计划任务基本上是在解决这些异常问题。
我建议的方法是使用雄辩的模型属性和如下所示的属性变异器:
class Publication extends Model {
protected $appends = [ 'active' ];
public function getActiveAttribute() {
return $this->activeUntil < Carbon::now(); //Still active
}
}
这样,您的模型就包含了active
属性,该属性是通过雄辩而计算的,并且不存储在数据库中。