首頁  >  問答  >  主體

Laravel 在日期到期後自動變更資料庫中的狀態

我有 tasks 表,該表有 statusdeadline 欄位。當目前日期大於任務截止日期時,如何將狀態自動變更為「已過期」? Laravel 中有即時事件監 聽器嗎?

我想這就是事件監 聽器類別應該是什麼樣子,但我不確定下一步該做什麼。

<?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;
    }
}


#
P粉447002127P粉447002127283 天前474

全部回覆(3)我來回復

  • P粉683665106

    P粉6836651062023-12-16 11:39:22

    有即時事件偵聽器,但需要執行操作才能觸發。例如,當建立、更新或刪除模型時,就會觸發這些事件。

    沒有內建的「偵聽器」來 ping 每個等待您定義的欄位變更的模型。

    如果您想在任務過期時觸發進一步的邏輯(例如發送電子郵件),那麼您最好使用調度程序檢查是否有任何新的過期任務。 調度程序每分鐘運行一次 - 由 cron 設定。

    回覆
    0
  • P粉092778585

    P粉0927785852023-12-16 10:27:05

    因為您只檢查日期。你的 cron 只需要在午夜運行一次。使用 Laravel Scheduler 來完成您的工作。 首先創建一個類別

    class UpdateTasks
    {
        public function __invoke()
        {
            // do your task here...e.g.,
            Tasks::whereDate('deadline','<',today())->update(['status'=>'expired']);
        }
    }

    然後在你的app\Console\Kernel.php中,schedule方法-

    $schedule->call(new UpdateTasks())->daily();

    最後在您的伺服器上配置一個 cron 作業以每天午夜執行計劃命令。

    php artisan schedule:run

    回覆
    0
  • 似水

    似水2023-12-16 15:18:34

    你的問題我用GPT幫你解答  希望有用 

    606915a3b01db9aab05d290248494e3.jpg

    #

    回覆
    0
  • 取消回覆