Comment et quand utiliser saveQuietly() pour les mises à jour silencieuses dans Laravel

Mary-Kate Olsen
Libérer: 2024-10-28 22:41:02
original
808 Les gens l'ont consulté

How and When to Use saveQuietly() for Silent Updates in Laravel

Dans Laravel, saveQuietly() est une méthode disponible sur les modèles Eloquent qui vous permet d'enregistrer un modèle sans déclencher d'événements, tels que la création, la création, la mise à jour, la mise à jour et d'autres événements Eloquent. événements modèles. Cela peut être utile dans les situations où vous souhaitez mettre à jour ou enregistrer des données sans déclencher d'actions supplémentaires liées à ces événements, telles que la journalisation, les notifications ou la validation des données.

Voici un guide étape par étape avec un exemple pratique de saveQuietly() dans Laravel, y compris une explication détaillée de chaque partie.

Exemple de scénario

Imaginez que vous ayez un modèle utilisateur, et chaque fois qu'un utilisateur est mis à jour, un événement se déclenche qui envoie une notification à l'utilisateur. Cependant, dans certains cas spécifiques (tels que les mises à jour administratives ou les tâches de maintenance en arrière-plan), vous souhaiterez peut-être mettre à jour les informations utilisateur de manière silencieuse sans déclencher cette notification.

Étapes pour implémenter saveQuietly()

Étape 1 : Définir le modèle utilisateur et l'événement

Dans votre modèle utilisateur, vous pouvez avoir des écouteurs d'événements pour la mise à jour et les événements mis à jour, qui sont déclenchés lorsqu'un utilisateur est mis à jour.

Exemple de modèle utilisateur avec événements :

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $fillable = ['name', 'email', 'status'];

    protected static function booted()
    {
        // Event listener for updating
        static::updating(function ($user) {
            // Log or handle the update event
            \Log::info("User is being updated: {$user->id}");
        });

        // Event listener for updated
        static::updated(function ($user) {
            // Example action, such as sending a notification
            $user->notify(new \App\Notifications\UserUpdatedNotification());
        });
    }
}
Copier après la connexion
Copier après la connexion

Ici, à chaque fois qu'un utilisateur est mis à jour :

  1. L'événement de mise à jour enregistrera des informations sur la mise à jour.
  2. L'événement mis à jour enverra une notification à l'utilisateur.

Étape 2 : Mettre à jour un utilisateur normalement

Lorsque vous mettez à jour un utilisateur à l'aide de save(), ces événements se déclenchent.

Exemple :

$user = User::find(1);
$user->status = 'active';
$user->save();
Copier après la connexion
Copier après la connexion

Résultat attendu : Les événements de mise à jour et de mise à jour sont déclenchés, ce qui signifie que l'entrée de journal sera créée et l'utilisateur sera averti.

Étape 3 : Utilisation de saveQuietly() pour contourner les événements

Pour éviter de déclencher ces événements (par exemple, si un administrateur met à jour le statut de l'utilisateur dans le cadre d'une opération groupée), vous pouvez utiliser saveQuietly().

Exemple :

$user = User::find(1);
$user->status = 'inactive';
$user->saveQuietly();
Copier après la connexion
Copier après la connexion

Avec saveQuietly(), ni les événements de mise à jour ni ceux mis à jour ne sont déclenchés, ce qui signifie :

  • Aucune entrée de journal n'est créée pour la mise à jour.
  • Aucune notification n'est envoyée à l'utilisateur.

Explication étape par étape de saveQuietly()

  1. Localiser le modèle : récupérez l'instance de modèle que vous souhaitez mettre à jour. Ici, nous utilisons User::find(1) pour récupérer l'utilisateur avec un ID de 1.
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $fillable = ['name', 'email', 'status'];

    protected static function booted()
    {
        // Event listener for updating
        static::updating(function ($user) {
            // Log or handle the update event
            \Log::info("User is being updated: {$user->id}");
        });

        // Event listener for updated
        static::updated(function ($user) {
            // Example action, such as sending a notification
            $user->notify(new \App\Notifications\UserUpdatedNotification());
        });
    }
}
Copier après la connexion
Copier après la connexion
  1. Modifier les attributs du modèle : Modifiez les attributs nécessaires sur le modèle. Par exemple, changer le statut d'actif à inactif.
$user = User::find(1);
$user->status = 'active';
$user->save();
Copier après la connexion
Copier après la connexion
  1. Enregistrer sans déclencher d'événements : utilisez saveQuietly() au lieu de save(). Cela garantit qu’aucun événement de mise à jour ou de mise à jour n’est déclenché.
$user = User::find(1);
$user->status = 'inactive';
$user->saveQuietly();
Copier après la connexion
Copier après la connexion

Quand utiliser saveQuietly()

saveQuietly() est bénéfique dans des scénarios tels que :

  • Mises à jour groupées : lors de l'exécution de mises à jour en masse où le déclenchement d'événements pourrait entraîner des problèmes de performances.
  • Remplacements d'administrateur : lorsqu'un administrateur effectue des mises à jour qui ne nécessitent pas de notifications.
  • Processus en arrière-plan : pour les tâches planifiées ou les scripts de maintenance qui modifient les enregistrements sans avoir besoin d'alerter les utilisateurs ou d'enregistrer les modifications.
  • Contourner les validations/écouteurs : lorsque des mises à jour spécifiques n'ont pas besoin d'adhérer aux écouteurs ou aux validations du modèle standard.

Exemple complet dans le contrôleur

Voici comment insérer cela dans un contrôleur Laravel pour gérer les mises à jour administratives :

   $user = User::find(1);
Copier après la connexion

Résumé

  • save() déclenche tous les événements associés, utiles pour les mises à jour standards.
  • saveQuietly() contourne ces événements, ce qui est utile pour les mises à jour silencieuses ou groupées sans traitement supplémentaire.

L'utilisation de saveQuietly() peut rationaliser considérablement les tâches pour lesquelles la gestion des événements n'est pas nécessaire, vous donnant ainsi un meilleur contrôle sur le comportement du modèle Eloquent dans Laravel.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!