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 metodoprotected al modello. Nome del metodo in camelCase e tipo di ritorno Illuminate\Database\Eloquent\Casts\Attribute.
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 closureget 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, chiamashouldCache().
withoutObjectCaching().
Definizione di un mutator
Il mutator si definisce nell’argomentoset di Attribute::make(). Può essere raccolto nello stesso metodo dell’accessor.
set.
Scrivere su più attributi
Se la closureset 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 metodocasts() del modello restituisci un array.
Elenco dei cast integrati
Cast Stringable
ConAsStringable gli attributi vengono trattati come Illuminate\Support\Stringable.
Cast array / JSON
Puoi trattare in modo trasparente colonne JSON/TEXT come array PHP.-> puoi aggiornare anche una specifica chiave del JSON.
Cast AsArrayObject / AsCollection
Il cast standardarray non consente di modificare direttamente un offset. Con AsArrayObject o AsCollection eviti questo limite.
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.
serializeDate() (non influisce sul formato di salvataggio nel DB).
Cast di Enum
Puoi specificare come cast un Backed Enum di PHP 8.1+.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, usaAsEnumCollection.
Cast a livello di query
Per applicare cast dinamicamente all’esecuzione di una query usawithCasts().
Cast personalizzati
Puoi creare classi di cast personalizzate. Implementa l’interfacciaCastsAttributes e definisci get e set.
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.