Skip to main content

Cosa sono i cast

I cast di Eloquent sono il meccanismo che converte il valore grezzo letto dal database in un tipo PHP e, al salvataggio, esegue la conversione inversa. Si definiscono con il metodo casts.

Cast integrati

Elenco dei cast forniti di default da Laravel.
AsArrayObject e AsCollection sono implementati internamente in Laravel come cast personalizzati per permettere la modifica diretta di specifici offset dell’array.

Creare una classe di cast personalizzato

Se i cast integrati non bastano, crei un cast personalizzato che implementa l’interfaccia CastsAttributes.

Definizione dell’interfaccia

Il contract nel framework è definito così.
L’argomento $attributes contiene tutti gli attributi del modello, quindi puoi eseguire conversioni che coinvolgono più colonne (vedi il pattern Value Object più avanti).

Implementare un cast personalizzato di base

Il comando make:cast genera lo scaffold.
Viene generato app/Casts/AsMoney.php. Come esempio implementiamo un cast che converte un importo (salvato come intero) in un Value Object Money.
Applica il cast al modello.
Ora $order->price restituisce un’istanza Money.

Cast Value Object

Il pattern in cui più colonne del DB vengono trattate come un unico Value Object.

Esempio: cast di un indirizzo

Aggreghiamo address_line_one e address_line_two in un Value Object Address.
Se set restituisce un array, Eloquent usa le chiavi come nomi di colonna e salva ciascun valore nella colonna corrispondente. Nei cast su una sola colonna restituisci una stringa o un intero.
Applicazione al modello e utilizzo:

Cache dei Value Object

Gli attributi convertiti in Value Object vengono messi in cache da Eloquent. Accedendo due volte allo stesso attributo, ottieni la stessa istanza. Per disabilitare la cache aggiungi la proprietà $withoutObjectCaching alla classe cast.

Cast inbound (solo scrittura)

Cast che convertono solo in scrittura verso il DB e non in lettura. Implementano l’interfaccia CastsInboundAttributes. L’uso tipico è l’hashing. Quando salvi password o segreti, converti; in lettura restituisci direttamente l’hash.

Parametri del cast

Per passare parametri a un cast personalizzato, indicali dopo il nome della classe separati da :. Più parametri si separano con ,.
I parametri vengono passati al costruttore della classe cast.

Castables: portare la logica di cast sul Value Object

Un Value Object che implementa l’interfaccia Castable ha il metodo castUsing che restituisce la classe di cast. Il modello non deve conoscere la classe cast, e la logica di dominio resta ordinata.
Nel modello indichi la classe Value Object al posto della classe cast.
Combinando Castable con una classe anonima, puoi mantenere Value Object e logica di cast in un unico file.

Interazione con $appends e $hidden

Cast, $appends e $hidden sono meccanismi indipendenti, ma quando li combini serve attenzione.
In $hidden indica i nomi di colonna del DB. Non l’attributo prodotto dal cast (address), ma i nomi originali delle colonne (address_line_one, address_line_two).

Aggiungere cast a runtime

Se vuoi aggiungere un cast solo per una specifica query o richiesta usa il metodo mergeCasts.

Prossimi passi

Eloquent Observer ed eventi del modello

Impara come agganciarti agli eventi del ciclo di vita del modello (salvataggio, cancellazione, ecc.) per aggiungere logica prima e dopo.
Ultima modifica il 13 luglio 2026