Laravel change automatiquement de statut dans la base de données après l'expiration de la date
P粉447002127
P粉447002127 2023-12-15 13:36:40
0
3
557

J'ai tasks 表,该表有 statusdeadline 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粉447002127
P粉447002127

répondre à tous(3)
P粉683665106

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粉092778585

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','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
似水

J'utiliserai GPT pour vous aider à répondre à votre question, j'espère que cela sera utile

606915a3b01db9aab05d290248494e3.jpg

.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal