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 metodocasts.
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’interfacciaCastsAttributes.
Definizione dell’interfaccia
Il contract nel framework è definito così.$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 comandomake:cast genera lo scaffold.
app/Casts/AsMoney.php. Come esempio implementiamo un cast che converte un importo (salvato come intero) in un Value Object Money.
$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
Aggreghiamoaddress_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.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’interfacciaCastsInboundAttributes.
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 ,.
Castables: portare la logica di cast sul Value Object
Un Value Object che implementa l’interfacciaCastable 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.
Interazione con $appends e $hidden
Cast, $appends e $hidden sono meccanismi indipendenti, ma quando li combini serve attenzione.
Aggiungere cast a runtime
Se vuoi aggiungere un cast solo per una specifica query o richiesta usa il metodomergeCasts.
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.