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.
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.
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()); }); } }
Ici, à chaque fois qu'un utilisateur est mis à jour :
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();
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.
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();
Avec saveQuietly(), ni les événements de mise à jour ni ceux mis à jour ne sont déclenchés, ce qui signifie :
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()); }); } }
$user = User::find(1); $user->status = 'active'; $user->save();
$user = User::find(1); $user->status = 'inactive'; $user->saveQuietly();
saveQuietly() est bénéfique dans des scénarios tels que :
Voici comment insérer cela dans un contrôleur Laravel pour gérer les mises à jour administratives :
$user = User::find(1);
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!