Modelli Laravel: eseguire azioni automatiche quando i dati vengono creati, aggiornati o eliminati

laravel eloquent model

Inviare una notifica all’amministratore quando un nuovo utente si registra.

Registrare ogni modifica apportata a un prodotto

Eliminare i vecchi file dall’archivio quando viene rimosso un record

Invece di ripetere queste attività nel controller o nel livello di servizio, i modelli laravel di Eloquent offrono una soluzione più pulita e di più facile gestione.

Scopriamo insieme cosa sono gli eventi modello, come utilizzarli e perché vale la pena implementarli nei progetti Laravel.

Cosa sono gli eventi modello eloquenti

In Laravel, gli Eloquent Models consentono di agganciarsi a determinati eventi che vengono attivati automaticamente durante l’interazione con il database.

Ecco alcuni degli eventi più comuni:

  • created→ dopo che un modello è stato creato
  • updated→ dopo che un modello è stato aggiornato
  • deleted→ dopo che un modello è stato eliminato
  • saving→ prima che un modello venga creato o aggiornato
  • retrieved→ quando un modello viene recuperato dal database

Grazie a questi eventi è possibile automatizzare attività come l’invio di e-mail, la registrazione di attività o la pulizia di file, il tutto senza appesantire il codice del controller.

Perché utilizzare gli eventi modello?

Ecco perché dovresti prendere in considerazione l’utilizzo di eventi modello nella tua applicazione Laravel:

  • Struttura del codice più pulita
    Mantiene il controller libero da logica non correlata.
  • DRY (Non ripeterti):
    non ripetere più la stessa logica in più punti.
  • Scalabile e manutenibile.
    Più facile da gestire man mano che la tua applicazione cresce.
  • Ottimo per l’automazione.
    Perfetto per attività in background come notifiche, registrazione o pulizia.

Come utilizzare gli eventi modello

1. Direttamente nel modello ( booted()metodo)

Esempio: si desidera registrare ogni volta che un elemento Postviene creato, aggiornato o eliminato.

// app/Models/Post.php

class Post extends Model
{
protected static function booted()
{
static::created(function ($post) {
\Log::info('Post created: ID ' . $post->id);
});
static::updated(function ($post) {
\Log::info('Post updated: ID ' . $post->id);
});
static::deleted(function ($post) {
\Log::info('Post deleted: ID ' . $post->id);
});
}
}

Semplice ed efficace.

2. Utilizzo di un observer (per una logica più pulita e scalabile)

a. Creare un observer
php artisan make:observer PostObserver --model=Post
b. Aggiungere metodi di evento
// app/Observers/PostObserver.php

class PostObserver
{
public function created(Post $post)
{
\Log::info('Observer: Post created! ID ' . $post->id);
}
public function updated(Post $post)
{
\Log::info('Observer: Post updated. ID ' . $post->id);
}
public function deleted(Post $post)
{
\Log::info('Observer: Post deleted. ID ' . $post->id);
}
}


c. Registrare l’observer
// app/Providers/AppServiceProvider.php

public function boot()
{
Post::observe(PostObserver::class);
}

Autore