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.
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 migrerenOm voorbeelden in dit artikel uit te voeren, moet u maken
naam
enpublished_at
kolommen in depost
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 vervangenattribuut naam
met een echte kenmerknaam.De
setNameAttribute
methode wordt aangeroepen vóór de waarde van denaam
attribuut wordt opgeslagen in de database. Om de dingen eenvoudig te houden, hebben we zojuist hetstrtolower
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 hetucfirst
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 dePost
model. Het moet de waarde van de naamkolom instellen op post titel zoals we de hebben gebruiktstrtolower
functie in desetNameAttribute
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 converterenKoolstof
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
enupdated_at
, bij elke databasemigratie. En het converteert die waarden naar eenKoolstof
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 eenKoolstof
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 dePost
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 degetTimestamp
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!