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_idetitle) - 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.
firstOrFailefindOrFail→ gestione rapida di 404firstOrCreate/firstOrNew→ crea se non esiste, utile per inserimenti condizionalifirstOr→ logica personalizzata se non trovatoupdateOrCreate→ aggiornamento o creazione combinata in un’unica riga
Utilizzarli correttamente rende il codice più leggibile, efficiente e sicuro.

