Heim  >  Artikel  >  Datenbank  >  Wie implementiert man die Multi-Table-Vererbung für Beiträge in Laravel mit Eloquent?

Wie implementiert man die Multi-Table-Vererbung für Beiträge in Laravel mit Eloquent?

Linda Hamilton
Linda HamiltonOriginal
2024-10-25 04:40:30138Durchsuche

How to Implement Multi-Table Inheritance for Posts in Laravel Using Eloquent?

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:

  • Alle Beiträge abrufen : Post::all().
  • Alle Fragen abrufen: Question::all().
  • Zugriff auf verwandte Frageeigenschaften von einem Post-Objekt: $post->postable->question_column .
  • Bestimmen Sie den Beitragstyp: get_class($post->postable).
  • Erstellen Sie eine neue Frage:

    • Erstellen Sie sowohl eine Frage als auch Objekt posten.
    • Verknüpfen Sie sie mit $question->post()->save($post).

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!

Stellungnahme:
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