GlosarioBase de datos

¿Qué es Observer?

Los Observers en Laravel son clases que escuchan eventos del ciclo de vida de un modelo Eloquent como creating, updating, deleting y retrieved, permitiendo ejecutar logica automaticamente cuando ocurren estos eventos.

Observers

Los Observers agrupan los event listeners para un modelo Eloquent en una sola clase. Cada metodo corresponde a un evento del ciclo de vida del modelo.

Crear un Observer

php artisan make:observer PostObserver --model=Post
class PostObserver
{
    public function creating(Post $post): void
    {
        $post->slug = Str::slug($post->title);
        $post->user_id = auth()->id();
    }

    public function created(Post $post): void
    {
        // Notificar a los seguidores del autor
        $post->author->followers->each(function ($follower) use ($post) {
            $follower->notify(new NewPostPublished($post));
        });
    }

    public function updating(Post $post): void
    {
        if ($post->isDirty('title')) {
            $post->slug = Str::slug($post->title);
        }
    }

    public function deleting(Post $post): void
    {
        // Eliminar archivos asociados
        Storage::delete($post->cover_image);
    }

    public function forceDeleting(Post $post): void
    {
        // Solo cuando se usa forceDelete() con SoftDeletes
    }
}

Registrar el Observer

En Laravel 11+, los observers se registran con un atributo en el modelo:

use Illuminate\Database\Eloquent\Attributes\ObservedBy;

#[ObservedBy(PostObserver::class)]
class Post extends Model
{
    // ...
}

Eventos disponibles

retrieved, creating, created, updating, updated, saving, saved, deleting, deleted, trashed, forceDeleting, forceDeleted, restoring, restored, replicating.

Los Observers mantienen la logica de efectos secundarios separada del modelo, mejorando la organizacion del codigo. Ten cuidado de no poner demasiada logica en observers, ya que pueden dificultar la depuracion.