我想知道是否有一个函数始终在检查数据库中的列,并且该列在后台运行。
例如:
if(date<Carbon::now())
{
//change value in other column
}
该数据流,但始终不断检查数据库。我认为这可以通过事件和听众来完成吗?但是我不确定。
谢谢!
答案 0 :(得分:0)
您需要Task Scheduling。
首先,将cron条目添加到您的服务器:
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
然后,从app/Console/Kernel.php
创建工匠命令或Clousure:
protected function schedule(Schedule $schedule)
{
$schedule->call(function () {
// Your logic
})
->everyMinute();
}
这将检查每分钟。当然,您可以更改schedule frequency options。
如果您需要通过Carbon比较日期,则可以使用:
$now = Carbon::now();
if($entry->your_date_col->lessThan($now))
{
// change value in other column
}
注意:不要忘记在模型中转换日期变量。默认情况下,Eloquent会将
created_at
和updated_at
列转换为Carbon实例。
$protected $dates = [
'created_at',
'updated_at',
'deleted_at'
];
答案 1 :(得分:0)
根据您使用的数据 ,an accessor可能是一种更简单的方法:
public function getFooAttribute($value) {
if($this->bar < Carbon::now()) {
return 'some modified value';
}
return $value;
}
这不会更改数据库中的值,但是会更改模型本身中的值。如果您仅出于显示目的而对其进行更改,则可以在不更改基础数据库存储的情况下实现此目的。
答案 2 :(得分:-1)
您可以创建一个cron作业,该作业在每分钟或每分钟5分钟后执行一次。
curl http://yourdomain.com/cron
创建一个在其中编写功能的控制器功能。
if(date<Carbon::now())
{
//change value in other columns
}