MÉTODOS QUIETLY DE ELOQUENT: CÓMO UTILIZARLOS
En Laravel, cada vez que se usa:- save
- update
- delete
- Evitar recursividad infinita en observers (un delete dispara otro delete..., etc...).
- Limpiezas masivas, migraciones o seeds sin lanzar miles de notificaciones.
- Actualizaciones internas en cron jobs o background tasks.
- Operationes masivas.
Métodos clave "quietly"
- saveQuietly → Guarda el modelo sin eventos (creating/created/saving/updated/etc.).
- updateQuietly → Actualiza atributos directamente sin eventos.
- deleteQuietly → Elimina el registro sin deleting/deleted.
- forceDeleteQuietly → Hard delete (con SoftDeletes) sin eventos.
- restoreQuietly → Restaura un soft-deleted sin restored event.
Ejemplos
- Guardar cambios sin disparar observers ni jobs
$user = User::find(1);
$user->status = 'inactive';
$user->saveQuietly(); // → Cambia el status... pero NADA de eventos ni emails
- Actualización masiva silenciosa
// Actualiza miles de órdenes sin disparar nada por cada una
Order::where('status', 'pending')->updateQuietly(['status' => 'completed']);
- Evitar bucles infinitos en cascades de eliminación
// En un observer o job: borra posts de un user sin que el observer de Post se dispare
$user->posts()->each(function ($post) {
$post->deleteQuietly(); // Silencioso y sin recursión
});
- Eliminación permanente silenciosa
$trashedComment = Comment::withTrashed()->find(5);
$trashedComment->forceDeleteQuietly(); // Borra forever sin forceDeleted event
- Restaurar sin ruido
$deletedUser->restoreQuietly(); // Vuelve a la vida sin disparar restored
- Antes de estos métodos, la gente usaba trucos como
Model::withoutEvents(fn () => $model->save());
- Guardar cambios sin disparar observers ni jobs
$user = User::find(1); $user->status = 'inactive'; $user->saveQuietly(); // → Cambia el status... pero NADA de eventos ni emails - Actualización masiva silenciosa
// Actualiza miles de órdenes sin disparar nada por cada una Order::where('status', 'pending')->updateQuietly(['status' => 'completed']); - Evitar bucles infinitos en cascades de eliminación
// En un observer o job: borra posts de un user sin que el observer de Post se dispare $user->posts()->each(function ($post) { $post->deleteQuietly(); // Silencioso y sin recursión }); - Eliminación permanente silenciosa
$trashedComment = Comment::withTrashed()->find(5); $trashedComment->forceDeleteQuietly(); // Borra forever sin forceDeleted event - Restaurar sin ruido
$deletedUser->restoreQuietly(); // Vuelve a la vida sin disparar restored - Antes de estos métodos, la gente usaba trucos como
Model::withoutEvents(fn () => $model->save());