Laravel是否一直在检查数据库中的列或类似内容的功能/实现?

时间:2018-10-25 22:26:08

标签: laravel laravel-5

我想知道是否有一个函数始终在检查数据库中的列,并且该列在后台运行。

例如:

if(date<Carbon::now())
{
  //change value in other column
}

该数据流,但始终不断检查数据库。我认为这可以通过事件和听众来完成吗?但是我不确定。

谢谢!

3 个答案:

答案 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_atupdated_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
 }