„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > **Einzeltabellenvererbung vs. Mehrtabellenvererbung mit Eloquent: Welches ist das Richtige für Ihre Laravel-Anwendung?**

**Einzeltabellenvererbung vs. Mehrtabellenvererbung mit Eloquent: Welches ist das Richtige für Ihre Laravel-Anwendung?**

Veröffentlicht am 15.11.2024
Durchsuche:975

**Single Table Inheritance vs. Multi Table Inheritance with Eloquent: Which is Right for Your Laravel Application?**

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

  • Alle Beiträge abrufen: $posts = Post::all();
  • Alle Fragen abrufen: $questions = Question::all();
  • Fragenspezifische Spalte aus einem Beitrag abrufen: $question_column = $post->postable- >question_column;
  • Beitragstyp prüfen: echo 'Type: '.get_class($post->postable);

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.

Neuestes Tutorial Mehr>

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