Maison  >  Questions et réponses  >  le corps du texte

Laravel change automatiquement de statut dans la base de données après l'expiration de la date

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粉447002127P粉447002127283 Il y a quelques jours480

répondre à tous(3)je répondrai

  • P粉683665106

    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.

    répondre
    0
  • P粉092778585

    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

    répondre
    0
  • 似水

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

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

    606915a3b01db9aab05d290248494e3.jpg

    .

    répondre
    0
  • Annulerrépondre