我有 tasks 表,该表有 status 和 deadline 列。当当前日期大于任务截止日期时,如何将状态自动更改为“已过期”? 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;
}
}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
有实时事件侦听器,但需要执行操作才能触发。例如,当创建、更新或删除模型时,就会触发这些事件。
没有内置的“侦听器”来 ping 每个等待您定义的字段更改的模型。
如果您想在任务过期时触发进一步的逻辑(例如发送电子邮件),那么您最好使用调度程序检查是否有任何新的过期任务。 调度程序每分钟运行一次 - 由 cron 设置。
因为您只检查日期。你的 cron 只需要在午夜运行一次。使用 Laravel Scheduler 来完成您的工作。 首先创建一个类
class UpdateTasks { public function __invoke() { // do your task here...e.g., Tasks::whereDate('deadline','update(['status'=>'expired']); } }然后在你的app\Console\Kernel.php中,schedule方法-
最后在您的服务器上配置一个 cron 作业以每天午夜运行计划命令。
你的问题我用GPT帮你解答 希望有用