当时间超过存储时间 Laravel 时自动更新所有行的状态列(任务计划)

Automatically update all row's status column when time has exceeded from stored time Laravel (Task Scheduling)

如果 now 时间超过 'close_at' 时间,我想每分钟检查我在数据库中存储的数据。那么我可以将 'status' 列更改为 closed.

我一直在想我可以 ->get() 所有数据从 table 并使用循环检查每个数据的 'close_at' 然后更改 status 但那是是不是没有效果也没有效率?

知道了吗?提前致谢:)

在上述答案的基础上进行更全面的回答:

  1. 确保 cron 每分钟都在执行 Laravel 的调度程序:

    php8.0 /home/yourdomain.com/artisan schedule:run
    
  2. 新建Laravel命令执行相关逻辑:

    php artisan create:command CloseJobs
    
  3. 在其中写入必要的代码 class - 在这种情况下,检索所有需要关闭的相关未完成工作并关闭它们,我们可以通过批量分配一次性完成简单的行(确保你的 'status' 被添加到模型的 $fillable 数组中):

    protected $signature = 'close:jobs';
    
    ....
    
    $jobs = Job::where('status', 'open')->where('close_at', '<', now())->update(['status' => 'closed']);
    
  4. 告诉 Laravel 在 App\Console\Kernel 中每分钟执行该任务。php :

    $schedule->command('close:jobs')->everyMinute();