Frage:
Angesichts des Post-Modells:
<code class="php">class Post extends Eloquent { // Model code... }</code>
Wie können Sie die Vererbung für Artikel- und Fragemodelle implementieren, sodass sie von Post aus erweitert werden können?
Einzeltabellenvererbung
Einzeltabellenvererbung umfasst das Speichern aller Modelldaten in einer einzigen Tabelle mit einer Typspalte zur Unterscheidung von Modellen. Dieser Ansatz kann jedoch aufgrund ungenutzter Spalten für bestimmte Modelltypen zu zahlreichen NULL-Werten führen.
Multi-Table-Vererbung
Multi-Table-Vererbung nutzt Polymorphismus und verwendet separate Tabellen für jedes Modell und verbindet sie über eine Referenztabelle. Die Referenztabelle enthält Spalten wie postable_id und postable_type.
Einrichtung des Eloquent-Modells
Definieren Sie im Post-Modell eine morphTo-Beziehung:
<code class="php">public function postable(){ return $this->morphTo(); }</code>
Im Fragemodell (ähnlich für Artikel):
<code class="php">public function post(){ return $this->morphOne('Post', 'postable'); }</code>
Verwendung:
<code class="php">$post = new Post(); $post->shared_column = 'New Question Post'; $post->save(); $question = new Question(); $question->question_column = 'test'; $question->post()->save($post);</code>
Fazit
Multi-Table-Vererbung bietet a Effizientere Datenbankstruktur im Vergleich zur Einzeltabellenvererbung. Es erfordert zusätzliche Modelllogik, bietet aber einen flexibleren und skalierbareren Ansatz für die Handhabung der Modellvererbung in Laravel's Eloquent.
Das obige ist der detaillierte Inhalt vonWie können Sie die Vererbung einzelner Tabellen für Artikel- und Fragemodelle mithilfe von Laravel's Eloquent implementieren und das Post-Modell erweitern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!