Heim > Datenbank > MySQL-Tutorial > Hauptteil

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

Barbara Streisand
Freigeben: 2024-10-27 01:59:30
Original
515 Leute haben es durchsucht

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

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

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

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!

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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!