Mutatori e accessori eloquenti a Laravel

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.

Creare accessori e mutatori in una classe modello

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 migrate

Per poter eseguire degli esempi in questo articolo, è necessario creare nome e published_at colonne nel inviare 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 sostituire nome attributo con un nome dell'attributo reale.

Il setNameAttribute il metodo viene chiamato prima del valore di nome l'attributo è salvato nel database. Per mantenere le cose semplici, abbiamo appena usato il strtolower 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 il ucfirst 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 il Inviare modello. Dovrebbe impostare il valore della colonna del nome su titolo del post come abbiamo usato il strtolower funzione nel setNameAttribute 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 a Carbonio 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 e updated_at, con ogni migrazione del database. E converte quei valori in a Carbonio 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 a Carbonio 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 il Inviare 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 il getTimestamp 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!