In questo articolo, passeremo attraverso i mutatori e gli accessori dell'Orm Eloquent nel framework web di Laravel. Dopo l'introduzione, passeremo attraverso una manciata di esempi per comprendere questi concetti.
In Laravel, i mutatori e gli accessori consentono di modificare i dati prima che vengano salvati e recuperati da un database. Per essere precisi, il mutatore consente di modificare i dati prima che vengano salvati in un database. D'altra parte, l'accessor ti permette di modificare i dati dopo che sono stati recuperati da un database.
In effetti, il modello Laravel è il punto centrale in cui è possibile creare i metodi di accesso e mutatore. E, naturalmente, è bello avere tutte le tue modifiche in un singolo posto piuttosto che sparsi in luoghi diversi.
Ora che hai familiarità con il concetto di base dei mutatori e degli accessori, andremo avanti e svilupperemo un esempio reale per dimostrarlo.
Presumo che tu sia a conoscenza del modello Eloquent in Laravel e utilizzeremo il modello Post come punto di partenza del nostro esempio. Se non hai creato il Inviare
modello ancora, usiamo il artigiano
comando per crearlo.
php artigianale: modello Post - migrazione
Questo dovrebbe creare un file di modello su app / post.php
come mostrato di seguito.
Sostituiamo il contenuto di quel file con il seguente.
attributes ['name'] = strtolower ($ valore);Come abbiamo usato il
--migrazione
opzione, dovrebbe anche creare una migrazione del database associata. Nel caso in cui non si è a conoscenza, è possibile eseguire il comando seguente in modo che in realtà crei una tabella nel database.php artisan migratePer poter eseguire degli esempi in questo articolo, è necessario creare
nome
epublished_at
colonne nelinviare
tavolo. Ad ogni modo, non entreremo nei dettagli dell'argomento della migrazione, poiché è fuori dallo scopo di questo articolo. Quindi torneremo ai metodi che ci interessano.Innanzitutto, passiamo al metodo del mutatore.
/ ** * Imposta il titolo del post. * * @param string $ value * @return string * / public function setNameAttribute ($ value) $ this-> attributes ['name'] = strtolower ($ value);Come abbiamo discusso in precedenza, i mutatori vengono utilizzati per modificare i dati prima che vengano salvati in un database. Come puoi vedere, la sintassi del metodo del mutatore è
set attribute-name attributo
. Certo, devi sostituirenome attributo
con un nome dell'attributo reale.Il
setNameAttribute
il metodo viene chiamato prima del valore dinome
l'attributo è salvato nel database. Per mantenere le cose semplici, abbiamo appena usato ilstrtolower
funzione che converte il titolo del post in minuscolo prima di essere salvato nel database.In questo modo, è possibile creare metodi di mutatore su tutte le colonne della tabella. Successivamente, passiamo al metodo di accesso.
Se i mutatori vengono utilizzati per modificare i dati prima di essere salvati in un database, il metodo accessor viene utilizzato per modificare i dati dopo essere stati recuperati da un database. La sintassi del metodo accessor è la stessa di quella del mutator, tranne che inizia con la parola chiave get invece della parola chiave set.
Passiamo al metodo di accesso
getNameAttribute
./ ** * Ottieni il titolo del post. * * @param string $ valore * @return stringa * / public function getNameAttribute ($ value) return ucfirst ($ value);Il
getNameAttribute
il metodo verrà chiamato dopo che il valore dell'attributo name è stato recuperato dal database. Nel nostro caso, abbiamo appena usato ilucfirst
metodo per modificare il titolo del post.E questo è il modo in cui dovresti usare gli accessor nei tuoi modelli. Finora, abbiamo appena creato i metodi di accesso e mutatore e testeremo quelli nella sezione imminente.
Mutanti in azione
Creiamo un controller su
App / HTTP / Controller / MutatorController.php
in modo che possiamo testare il metodo del mutatore che abbiamo creato nella sezione precedente.setAttribute ('name', 'Post title'); $ Post-> save ();Inoltre, è necessario creare un percorso associato in
percorsi / web.php
file per accedervi.Route :: get ('mutator / index', 'MutatorController @ index');Nel
indice
metodo, stiamo creando un nuovo post usando ilInviare
modello. Dovrebbe impostare il valore della colonna del nome su titolo del post come abbiamo usato ilstrtolower
funzione nelsetNameAttribute
metodo mutatore.Data Mutator
Oltre al mutatore di cui abbiamo discusso in precedenza, il modello Eloquent fornisce un paio di speciali mutatori che consentono di modificare i dati. Ad esempio, il modello Eloquent di Laravel è dotato di uno speciale
$ date
proprietà che consente di convertire automaticamente le colonne desiderate in aCarbonio
data dell'istanza.All'inizio di questo articolo, abbiamo creato il
Inviare
modello, e il codice seguente faceva parte di quella classe.... / ** * Gli attributi che devono essere modificati alle date. * * @var array * / protected $ dates = ['created_at', 'updated_at', 'published_at']; ...Come probabilmente saprai, Laravel crea sempre due campi relativi alla data,
created_at
eupdated_at
, con ogni migrazione del database. E converte quei valori in aCarbonio
data anche l'istanza.Supponiamo che tu abbia un paio di campi in una tabella che vorresti considerare come campi data. In tal caso, è sufficiente aggiungere i nomi delle colonne nel file
$ date
schieramento.Come puoi vedere nel codice sopra, abbiamo aggiunto il
published_at
colonna nel$ date
array e si assicura che il valore di quella colonna venga convertito in aCarbonio
data dell'istanza.Accessors in azione
Per vedere gli accessor in azione, andiamo avanti e creiamo un file controller
App / HTTP / Controller / AccessorController.php
con i seguenti contenuti.nome; // controlla la proprietà data echo $ post-> published_at; // dato che abbiamo modificato la colonna published_at come data di Carbon, possiamo usare anche following echo $ post-> published_at-> getTimestamp (); Uscita;Inoltre, creiamo un percorso associato in
percorsi / web.php
file per accedervi.Route :: get ('accessor / index', 'AccessorController @ index');Nel
indice
metodo, abbiamo usato ilInviare
modello per caricare un post di esempio in primo luogo.Successivamente, stiamo ispezionando il valore della colonna del nome e dovrebbe iniziare con una lettera maiuscola poiché abbiamo già definito il metodo di accesso
getNameAttribute
per quella colonna.Andando oltre, abbiamo esaminato il valore di
pubblicato
_a
colonna, e che dovrebbe essere trattata come una data. A causa di ciò, Laravel lo converte in un'istanza di Carbon in modo da poter utilizzare tutti i metodi di utilità forniti da tale libreria. Nel nostro caso, abbiamo usato ilgetTimestamp
metodo per convertire la data in un timestamp.E questo ci porta alla fine di questo articolo!
Conclusione
Oggi abbiamo esplorato i concetti di mutator e accessors dell'Oloquent ORM di Laravel. Fornisce un buon modo per modificare i dati prima che vengano salvati e recuperati da un database.
Per quelli di voi che stanno appena iniziando con Laravel o stanno cercando di espandere le vostre conoscenze, il vostro sito o la vostra applicazione con estensioni, abbiamo una varietà di cose che potete studiare nel mercato Envato.
Non esitare a condividere i tuoi pensieri usando il feed qui sotto!