Mutatori și accesori elocvenți în Laravel

În acest articol, vom trece prin mutatori și accesori ai ORM elocvent în cadrul web Laravel. După introducere, vom trece prin câteva exemple pentru a înțelege aceste concepte.

În Laravel, mutatorii și accesorii vă permit să modificați datele înainte ca acestea să fie salvate și preluate dintr-o bază de date. Pentru a fi specific, mutatorul vă permite să modificați datele înainte de a fi salvate într-o bază de date. Pe de altă parte, accesorul vă permite să modificați datele după ce acestea sunt preluate dintr-o bază de date.

De fapt, modelul Laravel este locul central în care puteți crea metode mutator și accessor. Și bineînțeles, este bine să aveți toate modificările într-un singur loc, decât să vă împrăștiați în locuri diferite.

Creați accesori și mutatori într-o clasă de modele

Așa cum sunteți familiarizați cu conceptul de bază al mutatorilor și accesorilor acum, vom continua și vom dezvolta un exemplu din lumea reală pentru a demonstra acest lucru.

Presupun că sunteți conștient de modelul elocvent din Laravel și vom folosi modelul Post ca punct de pornire al exemplului nostru. Dacă nu ați creat Post model încă, să folosim modelul artizan comanda pentru ao crea.

php artisan face: model post-migrare

Asta ar trebui să creeze un fișier model la app / Post.php așa cum se arată mai jos.

Să înlocuim conținutul acelui fișier cu următoarele.

atributele ['name'] = strtolower (valoare $); 

Așa cum am folosit --migrațiune opțiune, ar trebui să creeze și o migrare a bazei de date asociate. Doar în cazul în care nu știți, puteți executa următoarea comandă, astfel încât să creeze într-adevăr un tabel în baza de date.

php artizan migrează

Pentru a rula exemplele din acest articol, trebuie să creați Nume și published_at coloanele din post masa. Oricum, nu vom intra în detaliile subiectului de migrație, deoarece acesta nu face parte din acest articol. Așa că vom reveni la metodele de care suntem interesați.

În primul rând, hai să trecem prin metoda mutator.

/ ** * Setați titlul postului. * * @parametru de paramă $ value * @return string * / funcția publică setNameAttribute (valoare $) $ this-> atribute ['name'] = strtolower (valoare $); 

Așa cum am discutat mai devreme, mutatorii sunt folosiți pentru a modifica datele înainte ca acestea să fie salvate într-o bază de date. După cum puteți vedea, sintaxa metodei mutatorului este set atribut name Atribut. Desigur, trebuie să înlocuiți Numele atributului cu un nume de atribut real.

setNameAttribute metoda este numită înaintea valorii Nume atributul este salvat în baza de date. Pentru a păstra lucrurile simple, tocmai am folosit-o strtolower care convertește titlul postului la litere mici înainte de a fi salvat în baza de date.

În acest fel, puteți crea metode mutator pe toate coloanele mesei. Apoi, hai să trecem prin metoda accessor.

Dacă mutații sunt utilizați pentru a modifica datele înainte de a fi salvate într-o bază de date, metoda accessor este utilizată pentru a modifica datele după ce este extrasă dintr-o bază de date. Sintaxa metodei accessor este aceeași cu cea a mutatorului, cu excepția faptului că începe cu cuvântul cheie de căutare în locul cuvântului cheie setat.

Să trecem prin metoda accesorilor getNameAttribute.

/ ** * Obțineți titlul postării. * * @parametru de paramă $ value * @return string * / funcția publică getNameAttribute (valoare $) return ucfirst (valoare $); 

getNameAttribute metoda va fi chemată după ce valoarea atributului name este extrasă din baza de date. În cazul nostru, tocmai am folosit ucfirst metodă de modificare a titlului postului.

Și așa trebuie să folosiți accesoriile în modelele dvs. Până acum, tocmai am creat metode mutator și accessor și le vom testa pe cele din secțiunea viitoare.

Mutatorii în acțiune

Să creăm un controler la app / HTTP / Controllers / MutatorController.php astfel încât să putem testa metoda mutator pe care am creat-o în secțiunea anterioară.

setAttribute ('name', 'Title title'); $ Post-> save (); 

De asemenea, trebuie să creați o rută asociată în rute / web.php fișier pentru ao accesa.

Route :: get ('mutator / index', 'MutatorController @ index');

În index , noi creăm o postare nouă folosind Post model. Ar trebui să setați valoarea coloanei de nume la titlul postului așa cum am folosit strtolower funcția în setNameAttribute metoda mutator.

Data mutarelor

În plus față de mutatorul pe care l-am discutat mai devreme, modelul Eloquent oferă o serie de mutatori speciali care vă permit să modificați datele. De exemplu, modelul Elocvent din Laravel vine cu un model special datele $ proprietate care vă permite să convertiți automat coloanele dorite în a Carbon instanță dată.

La începutul acestui articol, am creat Post model, iar următorul cod face parte din acea clasă.

... / ** * Atributele care ar trebui mutate la date. * * @var array * / protejate $ dates = ['created_at', 'updated_at', 'published_at']; ... 

După cum probabil știți, Laravel creează întotdeauna două domenii legate de dată, creat la și updated_at, cu fiecare migrare a bazei de date. Și convertește aceste valori la a Carbon date de asemenea.

Să presupunem că aveți câteva câmpuri într-o masă pe care doriți să le tratați ca câmpuri de date. În acest caz, trebuie doar să adăugați nume de coloane în datele $ mulțime.

După cum puteți vedea în codul de mai sus, am adăugat published_at coloana din datele $ array și se asigură că valoarea acestei coloane va fi convertită la a Carbon instanță dată.

Accesorii în acțiune

Pentru a vedea accesoriile în acțiune, hai să mergem mai departe și să creăm un fișier de controler app / HTTP / Controllers / AccessorController.php cu următorul conținut.

Nume; // verificați data proprietății echo $ post-> published_at; // întrucât am mutat coloana publicată ca dată de carbon, putem folosi următoarele și echo $ post-> published_at-> getTimestamp (); Ieșire; 

De asemenea, să creăm un traseu asociat în rute / web.php fișier pentru ao accesa.

Route :: get ('accessor / index', 'AccessorController @ index');

În index metoda, am folosit Post model pentru a încărca un exemplu de post în primul rând.

Apoi, verificăm valoarea coloanei de nume și ar trebui să înceapă cu o literă majusculă, așa cum am definit deja metoda accessor getNameAttribute pentru acea coloană.

Mutarea în continuare, am inspectat valoarea publicat_la coloană, care ar trebui tratată ca o dată. Prin urmare, Laravel îl convertește într-o instanță Carbon, astfel încât să puteți utiliza toate metodele de utilitate furnizate de respectiva bibliotecă. În cazul nostru, am folosit getTimestamp metodă pentru a converti data într-o marcă de timp.

Și asta ne aduce la sfârșitul acestui articol!

Concluzie

Astăzi, am explorat conceptele de mutatori și accesori ai ORM elocvente din Laravel. Acesta oferă o modalitate frumoasă de a modifica datele înainte ca acestea să fie salvate și preluate dintr-o bază de date.

Pentru cei care sunteți fie doar începători cu Laravel, fie căutați să vă extindeți cunoștințele, site-ul sau aplicația cu extensii, avem o varietate de lucruri pe care le puteți studia în piața Envato.

Nu ezitați să vă împărtășiți gândurile folosind feedul de mai jos!

Cod