Eloquent mutators en accessors in Laravel

In dit artikel zullen we mutators en accessors van de Eloquent ORM in het Laravel-webraamwerk doornemen. Na de introductie zullen we een handvol voorbeelden doornemen om deze concepten te begrijpen.

In Laravel, mutators en accessors kunt u gegevens wijzigen voordat het wordt opgeslagen en opgehaald uit een database. Om specifiek te zijn, kunt u met de mutator gegevens wijzigen voordat deze in een database wordt opgeslagen. Aan de andere kant kunt u met de accessor gegevens wijzigen nadat deze is opgehaald uit een database.

In feite is het Laravel-model de centrale plaats waar je mutator- en accessormethoden kunt maken. En het is natuurlijk leuk om al je aanpassingen op één plaats te hebben in plaats van verspreid over verschillende plaatsen.

Maak accessors en mutators in een modelklasse

Omdat je nu bekend bent met het basisconcept mutators en accessors, gaan we door en ontwikkelen we een voorbeeld uit de praktijk om het te demonstreren.

Ik neem aan dat je op de hoogte bent van het Weldadige model in Laravel, en we zullen het Post-model gebruiken als een startpunt van ons voorbeeld. Als u de. Niet hebt gemaakt Post model maar, laten we het gebruiken ambachtsman commando om het te maken.

php artisan make: model Post --migratie

Dat zou een modelbestand moeten maken op app / post.php zoals hieronder getoond.

Laten we de inhoud van dat bestand vervangen door het volgende.

attributen ['naam'] = strtolower ($ waarde); 

Zoals we de hebben gebruikt --migratie optie, zou het ook een bijbehorende databasemigratie moeten creëren. Voor het geval je het niet weet, kun je de volgende opdracht uitvoeren, zodat het daadwerkelijk een tabel in de database maakt.

php artisan migreren

Om voorbeelden in dit artikel uit te voeren, moet u maken naam en published_at kolommen in de post tafel. Hoe dan ook, we zullen niet ingaan op de details van het onderwerp migratie, omdat dit buiten de scope van dit artikel valt. We komen dus terug bij methoden waarin we geïnteresseerd zijn.

Laten we eerst de mutator-methode doornemen.

/ ** * Stel de titel van het bericht in. * * @param string $ value * @return string * / public function setNameAttribute ($ value) $ this-> attributes ['name'] = strtolower ($ value); 

Zoals we eerder hebben besproken, worden de mutators gebruikt om gegevens te wijzigen voordat deze in een database worden opgeslagen. Zoals je kunt zien, is de syntaxis van de mutator-methode dat set attribute-name Attribute. Natuurlijk moet je het vervangen attribuut naam met een echte kenmerknaam.

De setNameAttribute methode wordt aangeroepen vóór de waarde van de naam attribuut wordt opgeslagen in de database. Om de dingen eenvoudig te houden, hebben we zojuist het strtolower functie die de titel van het bericht in kleine letters omzet voordat het in de database wordt opgeslagen.

Op deze manier kunt u mutatiemethoden maken voor alle kolommen van uw tabel. Laten we vervolgens de accessor-methode doorlopen.

Als mutators worden gebruikt om gegevens te wijzigen voordat deze in een database worden opgeslagen, wordt de accessor-methode gebruikt om gegevens te wijzigen nadat deze is opgehaald uit een database. De syntaxis van de accessor-methode is dezelfde als die van de mutator, behalve dat deze begint met het trefwoord get in plaats van het ingestelde sleutelwoord.

Laten we de accessor-methode doorlopen getNameAttribute.

/ ** * Haal de titel van het bericht op. * * @param string $ value * @return string * / public function getNameAttribute ($ value) return ucfirst ($ value); 

De getNameAttribute methode wordt aangeroepen nadat de waarde van het naamkenmerk is opgehaald uit de database. In ons geval hebben we zojuist het ucfirst methode om de titel van het bericht te wijzigen.

En dat is de manier waarop je accessors zou moeten gebruiken in je modellen. Tot nu toe hebben we zojuist mutator- en accessormethoden gemaakt en zullen we die in de komende sectie testen.

Mutators in actie

Laten we een controller maken op app / Http / Controllers / MutatorController.php zodat we de mutatormethode kunnen testen die we in het vorige gedeelte hebben gemaakt.

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

U moet ook een gekoppelde route maken in de routes / web.php bestand om het te openen.

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

In de inhoudsopgave methode, we maken een nieuw bericht met behulp van de Post model. Het moet de waarde van de naamkolom instellen op post titel zoals we de hebben gebruikt strtolower functie in de setNameAttribute mutator methode.

Datum mutators

In aanvulling op de mutator die we eerder hebben besproken, biedt het Eloquent-model een aantal speciale mutators waarmee je gegevens kunt wijzigen. Bijvoorbeeld, het Eloquent-model in Laravel wordt geleverd met een special $ data eigenschap waarmee u de gewenste kolommen automatisch naar een kunt converteren Koolstof datum exemplaar.

In het begin van dit artikel hebben we de Post model, en de volgende code was onderdeel van die klasse.

... / ** * De kenmerken die moeten worden gemuteerd naar datums. * * @var array * / protected $ dates = ['created_at', 'updated_at', 'published_at']; ... 

Zoals je waarschijnlijk weet, maakt Laravel altijd twee datum-gerelateerde velden, gemaakt bij en updated_at, bij elke databasemigratie. En het converteert die waarden naar een Koolstof datum-instantie ook.

Laten we aannemen dat je een aantal velden in een tabel hebt die je zou willen behandelen als datumvelden. In dat geval hoeft u alleen maar kolomnamen toe te voegen in de $ data rangschikking.

Zoals je kunt zien in de bovenstaande code, hebben we de published_at kolom in de $ data array en zorgt ervoor dat de waarde van die kolom wordt omgezet naar een Koolstof datum exemplaar.

Accessors in actie

Om accessors in actie te zien, laten we doorgaan en een controllerbestand maken app / Http / Controllers / AccessorController.php met de volgende inhoud.

naam; // controleer de eigenschap date echo $ post-> published_at; // aangezien we de column published_at hebben gemuteerd als Carbon-datum, kunnen we ook echo $ post-> published_at-> getTimestamp () gebruiken; Uitgang; 

Laten we ook een bijbehorende route maken in de routes / web.php bestand om het te openen.

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

In de inhoudsopgave methode, we hebben de Post model om in de eerste plaats een voorbeeldpost te laden.

Vervolgens inspecteren we de waarde van de kolom naam en deze zou moeten beginnen met een hoofdletter omdat we de accessor-methode al hebben gedefinieerd getNameAttribute voor die kolom.

Verderop kijkend, hebben we de waarde van de gepubliceerd_op kolom, en dat moet als een datum worden behandeld. Als gevolg hiervan converteert Laravel het naar een instantie van Carbon, zodat u alle hulpprogramma's kunt gebruiken die door die bibliotheek worden geboden. In ons geval hebben we de getTimestamp methode om de datum in een tijdstempel om te zetten.

En dat brengt ons tot het einde van dit artikel!

Conclusie

Vandaag hebben we de concepten van mutators en accessors van de Eloquent ORM in Laravel onderzocht. Het biedt een mooie manier om gegevens te wijzigen voordat het wordt opgeslagen in en opgehaald uit een database.

Voor degenen onder u die net zijn begonnen met Laravel of die op zoek zijn om uw kennis, site of applicatie uit te breiden met uitbreidingen, hebben we een aantal dingen die u kunt bestuderen in Envato Market.

Aarzel niet om uw gedachten te delen met behulp van de onderstaande feed!