Implementieren der Vererbung einzelner Tabellen mit Laravel's Eloquent
Bei der Arbeit mit Datenbankmodellen bietet die Vererbung eine Möglichkeit, Hierarchien verwandter Entitäten zu definieren. Bei der Wahl zwischen Einzel- und Mehrtabellenvererbung erweist sich letztere jedoch häufig als effizientere und flexiblere Lösung.
Einzeltabellenvererbung
Obwohl konzeptionell einfacher, Einzeltabelle Bei der Vererbung müssen alle Spalten für alle Typen in einer einzigen Tabelle gespeichert werden, was zu einer potenziellen Verbreitung von NULL-Werten führen kann. Dies kann sich auf die Datenbankleistung auswirken, insbesondere bei großen Datensätzen.
Multi-Table-Vererbung mit Eloquent
Multi-Table-Vererbung beinhaltet die Aufteilung einer einzelnen Tabelle in mehrere, die jeweils einem entsprechen spezifischen Modelltyp. Das Eloquent-Framework von Laravel bietet polymorphe Beziehungen, um diese Beziehungen nahtlos zu verwalten.
Post-Modell
Die Basisklasse für alle Beitragstypen, Post, stellt die gemeinsamen Spalten dar und definiert ein Postable polymorphe Beziehung:
class Post extends Eloquent {
public function postable() {
return $this->morphTo();
}
}
Fragen-/Artikelmodelle
Jeder spezifische Beitragstyp, wie Frage oder Artikel, geht vom Beitrag aus und definiert eine morphOne-Beziehung mit dem Basismodell:
class Question extends Post {
public function post() {
return $this->morphOne('Post', 'postable');
}
}
Verwendungsbeispiele
Eine neue Frage erstellen
Das Erstellen einer neuen Frage erfordert die Verknüpfung mit der Post-Tabelle, um die Vererbung mehrerer Tabellen aufrechtzuerhalten:
$post = new Post();
$post->shared_column = 'New Question Post';
$post->save();
$question = new Question();
$question->question_column = 'My Question';
$question->save();
$question->post()->save($post);
Obwohl die Vererbung mehrerer Tabellen komplexer ist, bietet sie eine sauberere Datenbankstruktur, verbessert die Leistung und ermöglicht eine größere Flexibilität bei der Modellierung komplexer Beziehungen.
Ausführliche Tutorials zur Mehrtabellenvererbung in Laravel finden Sie in den Ressourcen, die in der ursprünglichen Frageantwort bereitgestellt wurden.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3