当时间超过存储时间 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
但那是是不是没有效果也没有效率?
知道了吗?提前致谢:)
在上述答案的基础上进行更全面的回答:
确保 cron 每分钟都在执行 Laravel 的调度程序:
php8.0 /home/yourdomain.com/artisan schedule:run
新建Laravel命令执行相关逻辑:
php artisan create:command CloseJobs
在其中写入必要的代码 class - 在这种情况下,检索所有需要关闭的相关未完成工作并关闭它们,我们可以通过批量分配一次性完成简单的行(确保你的 'status' 被添加到模型的 $fillable 数组中):
protected $signature = 'close:jobs';
....
$jobs = Job::where('status', 'open')->where('close_at', '<', now())->update(['status' => 'closed']);
告诉 Laravel 在 App\Console\Kernel 中每分钟执行该任务。php :
$schedule->command('close:jobs')->everyMinute();
如果 now
时间超过 'close_at'
时间,我想每分钟检查我在数据库中存储的数据。那么我可以将 'status'
列更改为 closed
.
我一直在想我可以 ->get()
所有数据从 table 并使用循环检查每个数据的 'close_at'
然后更改 status
但那是是不是没有效果也没有效率?
知道了吗?提前致谢:)
在上述答案的基础上进行更全面的回答:
确保 cron 每分钟都在执行 Laravel 的调度程序:
php8.0 /home/yourdomain.com/artisan schedule:run
新建Laravel命令执行相关逻辑:
php artisan create:command CloseJobs
在其中写入必要的代码 class - 在这种情况下,检索所有需要关闭的相关未完成工作并关闭它们,我们可以通过批量分配一次性完成简单的行(确保你的 'status' 被添加到模型的 $fillable 数组中):
protected $signature = 'close:jobs'; .... $jobs = Job::where('status', 'open')->where('close_at', '<', now())->update(['status' => 'closed']);
告诉 Laravel 在 App\Console\Kernel 中每分钟执行该任务。php :
$schedule->command('close:jobs')->everyMinute();