graficajam
Laravel, firstOr e updateOrCreate

Laravel, firstOr e updateOrCreate

Giamp20/03/2024

Ciao! Oggi parliamo di alcuni metodi presenti in Eloquent utili quando vogliamo rendere più snello il codice dei nostri controller.

firstOrFail

Metodo veloce per lanciare un'eccezione se non viene trovato alcun record. Restituisce una pagina 404 se il modello non esiste.

// Recupera un articolo con id = 1 o genera 404 se non trovato
$article = Articles::findOrFail(1);

// Oppure usando firstOrFail su una query
$article = Articles::where('id', 1)->firstOrFail();

Nota: firstOrFail() non accetta ID diretto; per ID specifico si usa findOrFail().

findOrFail

Recupera un singolo modello tramite ID e lancia eccezione se non esiste.

$article = Articles::findOrFail(1);

firstOrCreate

Cerca un modello con gli attributi del primo array. Se non trova corrispondenza, crea un nuovo modello con gli attributi combinati dei due array.

$user = Customers::firstOrCreate(
    ['email' => request('email')],
    ['name' => request('name')]
);

firstOrNew

Simile a firstOrCreate, ma non salva automaticamente il record nel database. Bisogna chiamare save() manualmente.

$user = Customers::firstOrNew(
    ['email' => request('email')],
    ['name' => request('name')]
);

$user->save(); // salva manualmente

firstOr

Permette di gestire operazioni personalizzate quando il modello non esiste.

$user = User::where('email', request('email'))->firstOr(function () {
    return User::create([
        'email' => request('email'),
        'name'  => 'Nuovo utente'
    ]);
});

updateOrCreate

Aggiorna un modello esistente se i criteri di ricerca sono soddisfatti, altrimenti ne crea uno nuovo.

$article = Articles::updateOrCreate(
    ['author_id' => 1, 'title' => 'jimi hendrix the legend'],
    ['draft' => true]
);

Come funziona:

  • Il primo array è usato per cercare un record corrispondente (author_id e title)
  • Se il record esiste → aggiorna i campi del secondo array (draft)
  • Se il record non esiste → crea un nuovo record con tutti gli attributi dei due array combinati

Conclusioni

Questi metodi sono molto utili per snellire i controller e ridurre il codice boilerplate.

  • firstOrFail e findOrFail → gestione rapida di 404
  • firstOrCreate / firstOrNew → crea se non esiste, utile per inserimenti condizionali
  • firstOr → logica personalizzata se non trovato
  • updateOrCreate → aggiornamento o creazione combinata in un’unica riga

Utilizzarli correttamente rende il codice più leggibile, efficiente e sicuro.

Hai qualcosa da dire?

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

leggi anche...