Eloquente Mutatoren und Accessors in Laravel

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.

Erstellen Sie Accessoren und Mutatoren in einer Modellklasse

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 migrieren

Um Beispiele in diesem Artikel auszuführen, müssen Sie erstellen Name und Published_at Spalten in der Post 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 ersetzen Attributname mit einem tatsächlichen Attributnamen.

Das setNameAttribute Methode wird vor dem Wert von aufgerufen Name Attribut wird in der Datenbank gespeichert. Um es einfach zu halten, haben wir einfach die strolinger 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 verwendet ucfirst 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 der Post Modell. Es sollte den Wert der Namensspalte auf festlegen Beitragstitel wie wir das verwendet haben strolinger Funktion in der setNameAttribute 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önnen Kohlenstoff 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 und aktualisiert am, bei jeder Datenbankmigration. Und diese Werte werden in a konvertiert Kohlenstoff 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 wird Kohlenstoff 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 verwendet Post 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 verwendet getTimestamp 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!