I denne artikkelen går vi gjennom mutatorer og accessors av Eloquent ORM i Laravel web-rammeverket. Etter introduksjonen går vi gjennom en håndfull eksempler for å forstå disse konseptene.
I Laravel kan mutatorer og accessorer endre data før den lagres og hentes fra en database. For å være spesifikk, lar mutatoren deg endre data før den er lagret i en database. På den annen side gir accessor deg muligheten til å endre data etter at den er hentet fra en database.
Faktisk er Laravel-modellen det sentrale stedet hvor du kan lage mutator- og tilgangsmetoder. Og selvfølgelig er det fint å ha alle dine modifikasjoner på ett sted i stedet for spredt over forskjellige steder.
Som du er kjent med grunnleggende begrepet mutatorer og accessorer nå, vil vi gå videre og utvikle et ekteeksempel for å demonstrere det.
Jeg antar at du er klar over Eloquent-modellen i Laravel, og vi bruker Post-modellen som utgangspunkt for vårt eksempel. Hvis du ikke har opprettet Post
modell ennå, la oss bruke håndverker
kommandoen for å lage den.
php artisan make: modell Post - migrasjon
Det skal skape en modellfil på app / post.php
som vist under.
La oss erstatte innholdet til den filen med følgende.
attributter ['name'] = strtolower ($ verdi);Som vi har brukt
--migrasjon
alternativ, det bør også opprette en tilhørende database migrering. Bare hvis du ikke er klar, kan du kjøre følgende kommando slik at den faktisk lager et bord i databasen.php artisan migrereFor å kunne kjøre eksempler i denne artikkelen må du opprette
Navn
ogpublished_at
kolonner ipost
bord. Uansett vil vi ikke gå inn i detaljene i migrasjonsemnet, da det ikke er omfattet av denne artikkelen. Så vi kommer tilbake til metoder som vi er interessert i.For det første, la oss gå gjennom mutatormetoden.
/ ** * Still inn posttittelen. * * @param streng $ verdi * @return streng * / offentlig funksjon setNameAttribute ($ value) $ this-> attributter ['name'] = strtolower ($ value);Som vi diskuterte tidligere, brukes mutatørene til å endre data før det er lagret i en database. Som du kan se er syntaksen til mutatormetoden
satt attributtnavn Egenskap
. Selvfølgelig må du erstatteAttributtnavn
med et egentlig attributtnavn.De
setNameAttribute
Metoden kalles før verdien avNavn
Attributtet er lagret i databasen. For å holde ting enkelt, har vi nettopp bruktstrtolower
funksjon som konverterer posttittel til små bokstaver før den er lagret i databasen.På denne måten kan du opprette mutatormetoder på alle kolonnene i bordet ditt. Neste, la oss gå gjennom tilgangsmetoden.
Hvis mutatorer brukes til å endre data før det er lagret i en database, brukes tilgangsmetoden til å endre data etter at den er hentet fra en database. Syntaksen for tilgangsmetoden er den samme som for mutatoren, bortsett fra at den begynner med få søkeordet i stedet for det angitte søkeordet.
La oss gå gjennom tilgangsmetoden
getNameAttribute
./ ** * Få posten tittelen. * * @param streng $ verdi * @return streng * / offentlig funksjon getNameAttribute ($ value) return ucfirst ($ value);De
getNameAttribute
Metoden vil bli kalt etter at verdien av navnetattributtet hentes fra databasen. I vårt tilfelle har vi nettopp bruktucfirst
metode for å endre posttittelen.Og det er slik du skal bruke accessors i modellene dine. Så langt har vi nettopp opprettet mutator- og tilgangsmetoder, og vi vil teste dem i den kommende delen.
Mutatorer i aksjon
La oss lage en kontroller på
app / Http / kontrollere / MutatorController.php
slik at vi kan teste mutatormetoden som vi opprettet i den tidligere delen.setAttribute ('navn', 'Posttittel'); $ Post-> Lagre ();Du må også opprette en tilhørende rute i
ruter / web.php
filen for å få tilgang til den.Rute :: get ('mutator / index', 'MutatorController @ index');I
index
Metode, vi lager et nytt innlegg ved hjelp avPost
modell. Det bør sette verdien av navnet kolonnen til post tittel som vi har bruktstrtolower
fungere isetNameAttribute
mutatormetode.Date Mutators
I tillegg til mutatoren vi diskuterte tidligere, gir Eloquent-modellen et par spesielle mutatorer som lar deg endre data. For eksempel kommer Eloquent-modellen i Laravel med en spesiell
$ datoer
egenskap som lar deg automatisk konvertere de ønskede kolonnene til aKarbon
dato forekomst.I begynnelsen av denne artikkelen opprettet vi
Post
modell, og den følgende koden var en del av denne klassen.... / ** * Attributtene som skal muteres til datoer. * * @var array * / beskyttet $ dates = ['created_at', 'updated_at', 'published_at']; ...Som du sikkert vet, oppretter Laravel alltid to datarelaterte felt,
created_at
ogupdated_at
, med hver databasemigrasjon. Og det konverterer disse verdiene til aKarbon
dato instans også.La oss anta at du har et par felt i et bord som du ønsker å behandle som datafelt. I så fall må du bare legge til kolonneavn i
$ datoer
matrise.Som du kan se i koden ovenfor, har vi lagt til
published_at
kolonne i$ datoer
array, og det sørger for at verdien av den kolonnen blir konvertert til enKarbon
dato forekomst.Tilgangsstoffer i aksjon
For å se tilhengere i aksjon, la oss gå videre og opprette en kontrollerfil
app / Http / kontrollere / AccessorController.php
med følgende innhold.Navn; // sjekk datoegenskapen ekko $ post-> published_at; // som vi har mutert kolonnen published_at som Carbon date, kan vi også bruke følgende echo $ post-> published_at-> getTimestamp (); exit;La oss også lage en tilknyttet rute i
ruter / web.php
filen for å få tilgang til den.Rute :: få ('accessor / index', 'AccessorController @ index');I
index
metode, vi har bruktPost
modell for å laste et eksempel innlegg i utgangspunktet.Deretter inspiserer vi verdien av navnekolonnen, og den skal starte med et stort bokstav som vi allerede har definert tilgangsmetoden
getNameAttribute
for den kolonnen.Når vi beveger oss videre, har vi inspisert verdien av
publisert
_på
kolonne, og det bør behandles som en dato. På grunn av det konverterer Laravel det til en Carbon-forekomst, slik at du kan bruke alle verktøyene som tilbys av biblioteket. I vårt tilfelle har vi bruktgetTimestamp
metode for å konvertere datoen til en tidsstempel.Og det bringer oss til slutten av denne artikkelen!
Konklusjon
I dag har vi utforsket konseptene mutators og accessors av Eloquent ORM i Laravel. Det gir en fin måte å endre data på før den lagres og hentes fra en database.
For de av dere som enten bare er i gang med Laravel eller ser ut til å utvide din kunnskap, nettsted eller søknad med utvidelser, har vi en rekke ting du kan studere i Envato Market.
Ikke nøl med å dele tankene dine med fôren nedenfor!