In diesem Artikel werden wir Mutatoren und Zugriffsmethoden des Eloquent ORM im Laravel-Web-Framework durchgehen. Nach der Einführung gehen wir einige Beispiele durch, um diese Konzepte zu verstehen.
In Laravel können Sie mit Mutatoren und Accessoren Daten ändern, bevor sie in einer Datenbank gespeichert und von ihr abgerufen werden. Der Mutator ermöglicht es Ihnen, Daten zu ändern, bevor sie in einer Datenbank gespeichert werden. Auf der anderen Seite können Sie mit dem Accessor Daten ändern, nachdem sie aus einer Datenbank abgerufen wurden.
Tatsächlich ist das Laravel-Modell der zentrale Ort, an dem Sie Mutator- und Accessor-Methoden erstellen können. Und natürlich ist es schön, alle Ihre Änderungen an einem einzigen Ort zu haben, anstatt über verschiedene Orte verteilt zu sein.
Da Sie jetzt mit dem Grundkonzept von Mutatoren und Accessoren vertraut sind, werden wir ein reales Beispiel entwickeln, um es zu demonstrieren.
Ich gehe davon aus, dass Sie das Eloquent-Modell in Laravel kennen, und wir verwenden das Post-Modell als Ausgangspunkt für unser Beispiel. Wenn Sie noch keine erstellt haben Post
Modell noch, verwenden wir die Handwerker
Befehl, um es zu erstellen.
php handwerker machen: modell postmigration
Das sollte eine Modelldatei unter erstellen app / Post.php
Wie nachfolgend dargestellt.
Lassen Sie uns den Inhalt dieser Datei durch Folgendes ersetzen.
Attribute ['name'] = strtolower ($ value);Da haben wir die verwendet
--Migration
Option sollte auch eine zugehörige Datenbankmigration erstellt werden. Falls Sie dies nicht wissen, können Sie den folgenden Befehl ausführen, damit tatsächlich eine Tabelle in der Datenbank erstellt wird.PHP Handwerker migrierenUm Beispiele in diesem Artikel auszuführen, müssen Sie erstellen
Name
undPublished_at
Spalten in derPost
Tabelle. Wir werden auf die Details des Migrationsthemas nicht eingehen, da es sich nicht um den Umfang dieses Artikels handelt. Wir kehren also zu den Methoden zurück, die uns interessieren.Lassen Sie uns zunächst die Mutator-Methode durchgehen.
/ ** * Stellt den Beitragstitel ein. * * @param string $ value * @return string * / public function setNameAttribute ($ value) $ this-> attributes ['name'] = strtolower ($ value);Wie bereits erwähnt, werden die Mutatoren zum Ändern von Daten verwendet, bevor sie in einer Datenbank gespeichert werden. Wie Sie sehen, lautet die Syntax der Mutator-Methode
setze Attributname Attribut
. Sie müssen natürlich ersetzenAttributname
mit einem tatsächlichen Attributnamen.Das
setNameAttribute
Methode wird vor dem Wert von aufgerufenName
Attribut wird in der Datenbank gespeichert. Um es einfach zu halten, haben wir einfach diestrolinger
Funktion, die den Beitragstitel in Kleinbuchstaben umwandelt, bevor er in der Datenbank gespeichert wird.Auf diese Weise können Sie Mutator-Methoden für alle Spalten Ihrer Tabelle erstellen. Als nächstes gehen wir die Accessor-Methode durch.
Wenn Mutatoren zum Ändern von Daten verwendet werden, bevor sie in einer Datenbank gespeichert werden, werden mit der Zugriffsmethode Daten geändert, nachdem sie aus einer Datenbank abgerufen wurden. Die Syntax der Zugriffsmethode ist die gleiche wie die des Mutators, mit der Ausnahme, dass sie mit dem Schlüsselwort get anstelle des Satzschlüssels beginnt.
Gehen wir die Accessor-Methode durch
getNameAttribute
./ ** * Hole den Beitragstitel. * * @param string $ value * @return string * / public function getNameAttribute ($ value) return ucfirst ($ value);Das
getNameAttribute
Die Methode wird aufgerufen, nachdem der Wert des Namensattributs aus der Datenbank abgerufen wurde. In unserem Fall haben wir gerade die verwendetucfirst
Methode zum Ändern des Posttitels.Und so sollten Sie Accessoren in Ihren Modellen verwenden. Bisher haben wir Mutator- und Accessor-Methoden erstellt, die wir im nächsten Abschnitt testen werden.
Mutatoren in Aktion
Erstellen wir einen Controller unter
app / http / controller / mutatorController.php
Damit können wir die Mutator-Methode testen, die wir im vorherigen Abschnitt erstellt haben.setAttribute ('Name', 'Beitragstitel'); $ post-> save ();Außerdem müssen Sie eine verknüpfte Route in der erstellen
routen / web.php
Datei, um darauf zuzugreifen.Route :: get ('mutator / index', 'MutatorController @ index');In dem
Index
Methode erstellen wir einen neuen Beitrag mit derPost
Modell. Es sollte den Wert der Namensspalte auf festlegen Beitragstitel wie wir das verwendet habenstrolinger
Funktion in dersetNameAttribute
Mutator-Methode.Datum Mutators
Neben dem zuvor besprochenen Mutator bietet das Eloquent-Modell einige spezielle Mutatoren, mit denen Sie Daten ändern können. Zum Beispiel enthält das Eloquent-Modell in Laravel ein besonderes Modell
$ Datumsangaben
Eigenschaft, mit der Sie die gewünschten Spalten automatisch in eine konvertieren könnenKohlenstoff
Datumsinstanz.Am Anfang dieses Artikels haben wir die erstellt
Post
Modell und der folgende Code war Teil dieser Klasse.… / ** * Die Attribute, die zu Datumsangaben mutiert werden sollen. * * @var array * / protected $ dates = ['Created_at', 'Updated_at', 'Published_at'];…Wie Sie wahrscheinlich wissen, erstellt Laravel immer zwei datumsbezogene Felder,
hergestellt in
undaktualisiert am
, bei jeder Datenbankmigration. Und diese Werte werden in a konvertiertKohlenstoff
Datumsinstanz auch.Nehmen wir an, Sie haben ein paar Felder in einer Tabelle, die Sie als Datumsfelder behandeln möchten. In diesem Fall müssen Sie lediglich die Spaltennamen in der Spalte hinzufügen
$ Datumsangaben
Array.Wie Sie im obigen Code sehen können, haben wir das hinzugefügt
Published_at
Spalte in der$ Datumsangaben
Array, und es stellt sicher, dass der Wert dieser Spalte in eine konvertiert wirdKohlenstoff
Datumsinstanz.Accessor in Aktion
Um die Accessoren in Aktion zu sehen, erstellen wir eine Controller-Datei
app / HTTP / Controller / AccessorController.php
mit folgenden Inhalten.Name; // prüfe das Datumseigenschaft echo $ post-> Published_at; // Da wir die publizierte_at-Spalte als Carbon-Datum mutiert haben, können wir auch folgendes verwenden: echo $ post-> Published_at-> getTimestamp (); Ausfahrt;Lassen Sie uns auch eine verknüpfte Route im erstellen
routen / web.php
Datei, um darauf zuzugreifen.Route :: get ('Accessor / Index', 'AccessorController @ Index');In dem
Index
Methode haben wir die verwendetPost
Modell, um überhaupt einen Beispielbeitrag zu laden.Als Nächstes untersuchen wir den Wert der Namensspalte. Sie sollte mit einem Großbuchstaben beginnen, da wir die Zugriffsmethode bereits definiert haben
getNameAttribute
für diese Spalte.Um noch weiter zu gehen, haben wir den Wert von geprüft
veröffentlicht
_beim
Spalte, und das sollte als Datum behandelt werden. Aus diesem Grund konvertiert Laravel es in eine Carbon-Instanz, sodass Sie alle von dieser Bibliothek bereitgestellten Dienstprogrammmethoden verwenden können. In unserem Fall haben wir die verwendetgetTimestamp
Methode, um das Datum in einen Zeitstempel umzuwandeln.Und das bringt uns zum Ende dieses Artikels!
Fazit
Heute haben wir die Konzepte von Mutatoren und Accessoren des Eloquent ORM in Laravel untersucht. Es bietet eine gute Möglichkeit, Daten zu ändern, bevor sie in einer Datenbank gespeichert und abgerufen werden.
Für diejenigen unter Ihnen, die entweder gerade mit Laravel beginnen oder Ihr Wissen, Ihre Site oder Anwendung mit Erweiterungen erweitern möchten, haben wir eine Vielzahl von Möglichkeiten, die Sie in Envato Market lernen können.
Zögern Sie nicht, teilen Sie Ihre Gedanken mit dem untenstehenden Feed!