Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie können Sie die Vererbung einzelner Tabellen für Artikel- und Fragemodelle mithilfe von Laravel's Eloquent implementieren und das Post-Modell erweitern?

Barbara Streisand
Freigeben: 2024-10-25 05:08:02
Original
591 Leute haben es durchsucht

How can you implement single table inheritance for Article and Question models using Laravel's Eloquent, extending from the Post model?

Implementierung der Einzeltabellenvererbung mit Laravel's Eloquent

Frage:

Angesichts des Post-Modells:

<code class="php">class Post extends Eloquent {

    // Model code...
}</code>
Nach dem Login kopieren

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>
Nach dem Login kopieren

Im Fragemodell (ähnlich für Artikel):

<code class="php">public function post(){
    return $this->morphOne('Post', 'postable');
}</code>
Nach dem Login kopieren

Verwendung:

  • Alle Beiträge abrufen: Post::all()
  • Alle Fragen abrufen: Question::all()
  • Fragendetails aus einem Beitrag abrufen: $question_column2 = $post->postable->question_column2
  • Beitragstyp prüfen: if( $post->postbare Instanz der Frage)
  • Erstellen Sie eine neue Frage:
<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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage