Heim >Datenbank >MySQL-Tutorial >## Multi-Table-Vererbung in Laravel's Eloquent: Ein saubererer Ansatz?

## Multi-Table-Vererbung in Laravel's Eloquent: Ein saubererer Ansatz?

Barbara Streisand
Barbara StreisandOriginal
2024-10-27 01:59:30615Durchsuche

## Multi-Table Inheritance in Laravel's Eloquent: A Cleaner Approach?

Multi-Table-Vererbung in Laravel's Eloquent

Die Implementierung der Single-Table-Vererbung hört sich vielleicht nach einer bequemen Lösung zum Erweitern von Modellen an, bringt aber auch Nachteile mit sich Erhöhte Datenbankgröße aufgrund zahlreicher NULL-Werte und Komplexität bei der Abfrage bestimmter Spalten. Stattdessen bietet die Vererbung mehrerer Tabellen einen saubereren Ansatz.

Schemadesign

Erstellen Sie separate Tabellen für gemeinsam genutzte Spalten und eindeutige Spalten für jeden Modelltyp. Zum Beispiel:

  • Beiträge (shared_column)
  • Fragen (question_column, questions_column2)
  • Artikel (article_column, Article_column2)

Eloquente Modelle

Definieren Sie das Post-Modell als übergeordnete Klasse.

<code class="php">class Post extends Eloquent {
    // Shared column, relationships, etc.
    
    public function postable(){
        return $this->morphTo();
    }
}</code>

Erstellen Sie untergeordnete Modelle wie Frage für jeden postbaren Typ.

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

Verwendung

  • Alle Beiträge abrufen: $posts = Post::all();
  • Alle Fragen abrufen: $questions = Question::all();
  • Fragenspalten aus einem Beitrag abrufen: $question_column2 = $post-> ;postable->question_column2;
  • Überprüfen Sie, welcher Typ ein Beitrag ist: echo 'type: '.get_class($post->postable);

Neu erstellen Modelle

Beinhaltet das Erstellen von Datensätzen sowohl in der gemeinsamen Tabelle (Beiträge) als auch in der typspezifischen Tabelle (Fragen).

<code class="php">$question = new Question(); // Create a question record
$question->question_column = 'test';
$question->save();

$post = new Post(); // Create a post record
$post->shared_column = 'New Question Post';
$post->save();

// Link them together
$question->post()->save($post);</code>

Dieser Ansatz gewährleistet eine effizientere Datenbankstruktur und bietet eine skalierbare Lösung für die Modellvererbung in Laravel.

Das obige ist der detaillierte Inhalt von## Multi-Table-Vererbung in Laravel's Eloquent: Ein saubererer Ansatz?. 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