Einzeltabellenvererbung in Laravel mit Eloquent implementieren
Szenario:
Sie haben ein Modell benannten Beitrag und möchten Beiträge mithilfe der Vererbung in zwei Typen unterteilen: Artikel und Fragen.
Einzeltabellenvererbung
Einzeltabellenvererbung beinhaltet die Beibehaltung aller Typen in derselben Tabelle , mit einer Spalte zur Unterscheidung. Obwohl dieser Ansatz einfacher sein kann, kann er aufgrund von Spalten, die nicht auf alle Typen anwendbar sind, zu vielen NULL-Werten führen.
Multi-Table-Vererbung
Multi-Table Vererbung ist ein saubererer Ansatz, der die Daten in mehrere Tabellen aufteilt. Eine postable-Spalte gibt den Typ des Beitrags an und eine postable_id verweist auf den Primärschlüssel in der entsprechenden Tabelle.
Implementierung der Multi-Table-Vererbung in Eloquent
Post-Modell :
Fügen Sie eine postfähige Beziehung zum Post-Modell hinzu, bei der es sich um eine polymorphe Beziehung handelt:
<code class="php">class Post extends Eloquent { public function postable() { return $this->morphTo(); } }</code>
Frage- und Artikelmodelle:
Erstellen Sie separate Modelle für jeden Beitragstyp und stellen Sie die Beziehung zum Beitragsmodell her:
<code class="php">class Question extends Post { public function post() { return $this->morphOne('Post', 'postable'); } }</code>
<code class="php">class Article extends Post { public function post() { return $this->morphOne('Post', 'postable'); } }</code>
Verwendung:
Erstellen Sie eine neue Frage:
Empfehlung:
Für eine benutzerfreundlichere Implementierung wird empfohlen, die Modellerstellungslogik in wiederverwendbaren Funktionen innerhalb jeder Modellklasse zu konsolidieren.
Das obige ist der detaillierte Inhalt vonWie implementiert man die Multi-Table-Vererbung für Beiträge in Laravel mit Eloquent?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!