我有 tasks
表,該表有 status
和 deadline
列。當當前日期大于任務截止日期時,如何將狀態(tài)自動更改為“已過期”? Laravel 中有實時事件監(jiān) 聽器嗎?
我想這就是事件監(jiān) 聽器類應該是什么樣子,但我不確定下一步該做什么。
<?php namespace AppEvents; use AppModelsTask; use IlluminateBroadcastingInteractsWithSockets; use IlluminateFoundationEventsDispatchable; use IlluminateQueueSerializesModels; class DeadlineExpired { use Dispatchable, InteractsWithSockets, SerializesModels; /** * The task instance. * * @var AppModelsTask */ public $task; /** * Create a new event instance. * * @param AppModelsTask $task * @return void */ public function __construct(Task $task) { $this->task = $task; } }
有實時事件偵聽器,但需要執(zhí)行操作才能觸發(fā)。例如,當創(chuàng)建、更新或刪除模型時,就會觸發(fā)這些事件。
沒有內(nèi)置的“偵聽器”來 ping 每個等待您定義的字段更改的模型。
如果您想在任務過期時觸發(fā)進一步的邏輯(例如發(fā)送電子郵件),那么您最好使用調(diào)度程序檢查是否有任何新的過期任務。 調(diào)度程序每分鐘運行一次 - 由 cron 設置。
因為您只檢查日期。你的 cron 只需要在午夜運行一次。使用 Laravel Scheduler 來完成您的工作。 首先創(chuàng)建一個類
class UpdateTasks { public function __invoke() { // do your task here...e.g., Tasks::whereDate('deadline','update(['status'=>'expired']); } }
然后在你的app\Console\Kernel.php中,schedule方法-
$schedule->call(new UpdateTasks())->daily();
最后在您的服務器上配置一個 cron 作業(yè)以每天午夜運行計劃命令。
php artisan schedule:run