Skip to main content

Introduzione

Accessor, mutator e cast sono meccanismi per trasformare i valori degli attributi dei modelli Eloquent quando li leggi o li imposti sull’istanza del modello.
  • Accessor — trasforma il valore grezzo letto dal DB prima di passarlo all’applicazione
  • Mutator — trasforma il valore impostato dall’applicazione prima di salvarlo nel DB
  • Cast — definisce in modo dichiarativo la conversione di tipo di un attributo, senza scrivere metodi aggiuntivi

Definizione di un accessor

Per definire un accessor aggiungi un metodo protected al modello. Nome del metodo in camelCase e tipo di ritorno Illuminate\Database\Eloquent\Casts\Attribute.
Alla closure get viene passato il valore grezzo dal DB. Accedi dall’istanza del modello come proprietà first_name.
Se vuoi includere il valore calcolato dall’accessor in JSON/array, aggiungilo alla proprietà $appends del modello in snake_case.

Creare un value object da più attributi

La closure get può ricevere come secondo argomento $attributes (tutti gli attributi del modello). Combinando più colonne puoi restituire un value object.

Caching degli accessor

Gli accessor che restituiscono value object vengono memorizzati in cache automaticamente per restituire la stessa istanza. Per fare cache anche di tipi base come stringhe e numeri, chiama shouldCache().
Per disabilitare la cache degli oggetti usa withoutObjectCaching().

Definizione di un mutator

Il mutator si definisce nell’argomento set di Attribute::make(). Può essere raccolto nello stesso metodo dell’accessor.
Quando imposti un valore sul modello, viene chiamata la closure set.

Scrivere su più attributi

Se la closure set restituisce un array, puoi aggiornare più colonne insieme.

Cast degli attributi

I cast sono un modo pratico per dichiarare la conversione di tipo di un attributo senza scrivere accessor/mutator. Nel metodo casts() del modello restituisci un array.

Elenco dei cast integrati

Gli attributi null non vengono cast. Inoltre, non definire cast con lo stesso nome di una relazione né sulla chiave primaria.

Cast Stringable

Con AsStringable gli attributi vengono trattati come Illuminate\Support\Stringable.

Cast array / JSON

Puoi trattare in modo trasparente colonne JSON/TEXT come array PHP.
Con l’operatore -> puoi aggiornare anche una specifica chiave del JSON.

Cast AsArrayObject / AsCollection

Il cast standard array non consente di modificare direttamente un offset. Con AsArrayObject o AsCollection eviti questo limite.
Per usare una collection personalizzata indica using().

Cast di data e ora

created_at / updated_at sono di default castati a Carbon. Puoi definire allo stesso modo altre colonne data/ora.
Se specifichi un formato, viene usato in fase di serializzazione JSON.
Per cambiare il formato di serializzazione predefinito per tutte le date, sovrascrivi serializeDate() (non influisce sul formato di salvataggio nel DB).
Con immutable_datetime viene restituito un CarbonImmutable al posto di Carbon. Poiché le manipolazioni non modificano l’istanza originale, è più semplice scrivere codice senza effetti collaterali.

Cast di Enum

Puoi specificare come cast un Backed Enum di PHP 8.1+.
Nel DB viene salvato il backing value (string o int); in lettura viene convertito nell’istanza Enum.

Cast di array di Enum

Per salvare più valori Enum in un array in una sola colonna, usa AsEnumCollection.

Cast a livello di query

Per applicare cast dinamicamente all’esecuzione di una query usa withCasts().

Cast personalizzati

Puoi creare classi di cast personalizzate. Implementa l’interfaccia CastsAttributes e definisci get e set.
Per i dettagli implementativi (pattern value object, cast in ingresso, Castables, ecc.) consulta la pagina avanzata di seguito.

Approfondimento sui cast personalizzati

Implementazione dell’interfaccia CastsAttributes e pattern avanzati come value object e Castables.

Pagine correlate

Eloquent API Resource

Come usare le classi resource per trasformare i modelli in risposte JSON coerenti.
Ultima modifica il 13 luglio 2026