Eloquent Mutators og Accessors i Laravel

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.

Opprett tilbehørsdeler og mutatorer i en modellklasse

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 migrere

For å kunne kjøre eksempler i denne artikkelen må du opprette Navn og published_at kolonner i post 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 erstatte Attributtnavn med et egentlig attributtnavn.

De setNameAttribute Metoden kalles før verdien av Navn Attributtet er lagret i databasen. For å holde ting enkelt, har vi nettopp brukt strtolower 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 brukt ucfirst 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 av Post modell. Det bør sette verdien av navnet kolonnen til post tittel som vi har brukt strtolower fungere i setNameAttribute 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 a Karbon 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 og updated_at, med hver databasemigrasjon. Og det konverterer disse verdiene til a Karbon 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 en Karbon 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 brukt Post 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 brukt getTimestamp 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!