Î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.
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
șipublished_at
coloanele dinpost
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țiNumele atributului
cu un nume de atribut real.
setNameAttribute
metoda este numită înaintea valoriiNume
atributul este salvat în baza de date. Pentru a păstra lucrurile simple, tocmai am folosit-ostrtolower
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 folositucfirst
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ă folosindPost
model. Ar trebui să setați valoarea coloanei de nume la titlul postului așa cum am folositstrtolower
funcția însetNameAttribute
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 aCarbon
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
șiupdated_at
, cu fiecare migrare a bazei de date. Și convertește aceste valori la aCarbon
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 dindatele $
array și se asigură că valoarea acestei coloane va fi convertită la aCarbon
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 folositPost
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 folositgetTimestamp
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!