Maison > Questions et réponses > le corps du texte
J'ai tasks
表,该表有 status
和 deadline
colonnes. Comment changer automatiquement le statut en « Expiré » lorsque la date du jour est supérieure à la date d'échéance de la tâche ? Existe-t-il des auditeurs d’événements en temps réel dans Laravel ?
Je pense que c'est à cela que devrait ressembler la classe d'écoute d'événement, mais je ne sais pas quoi faire ensuite.
<?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粉6836651062023-12-16 11:39:22
Il existe des écouteurs d'événements en temps réel, mais ils nécessitent une action pour se déclencher. Par exemple, ces événements sont déclenchés lorsqu'un modèle est créé, mis à jour ou supprimé.
Il n'y a pas d'« écouteur » intégré pour envoyer une requête ping à chaque modèle en attente d'un changement de champ que vous définissez.
Si vous souhaitez déclencher une logique supplémentaire (comme l'envoi d'un e-mail) lorsqu'une tâche expire, vous feriez mieux d'utiliser un planificateur pour vérifier s'il y a de nouvelles tâches en retard. Le planificateur s'exécute toutes les minutes - défini par cron.
P粉0927785852023-12-16 10:27:05
Parce que vous vérifiez uniquement la date. Votre cron ne doit s'exécuter qu'une seule fois à minuit. Utilisez Laravel Scheduler pour effectuer votre travail. Créez d’abord une classe
class UpdateTasks { public function __invoke() { // do your task here...e.g., Tasks::whereDate('deadline','<',today())->update(['status'=>'expired']); } }
Puis dans votre appConsoleKernel.php, méthode de planification-
$schedule->call(new UpdateTasks())->daily();
Enfin, configurez une tâche cron sur votre serveur pour exécuter la commande planifiée tous les jours à minuit.
php artisan schedule:run
似水2023-12-16 15:18:34
J'utiliserai GPT pour vous aider à répondre à votre question, j'espère que cela sera utile
.