Rumah  >  Artikel  >  pangkalan data  >  ## Warisan Berbilang Meja dalam Laravel's Fasih: Pendekatan yang Lebih Bersih?

## Warisan Berbilang Meja dalam Laravel's Fasih: Pendekatan yang Lebih Bersih?

Barbara Streisand
Barbara Streisandasal
2024-10-27 01:59:30516semak imbas

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

Pewarisan Meja Berbilang dalam Laravel's Eloquent

Melaksanakan warisan jadual tunggal mungkin terdengar seperti penyelesaian yang mudah untuk memanjangkan model, tetapi ia datang dengan kelemahan seperti peningkatan saiz pangkalan data disebabkan oleh banyak nilai NULL dan kerumitan apabila membuat pertanyaan untuk lajur tertentu. Sebaliknya, warisan berbilang jadual menawarkan pendekatan yang lebih bersih.

Reka Bentuk Skema

Buat jadual berasingan untuk lajur kongsi dan lajur unik untuk setiap jenis model. Contohnya:

  • siaran (shared_column)
  • soalan (question_column, question_column2)
  • artikel (lajur_artikel, lajur_artikel2)

Model Fasih

Tentukan model Pos sebagai kelas induk.

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

Buat model kanak-kanak seperti Soalan untuk setiap jenis yang boleh dipos.

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

Penggunaan

  • Dapatkan semula semua siaran: $posts = Post::all();
  • Dapatkan semula semua soalan: $questions = Question::all();
  • Dapatkan lajur soalan daripada siaran: $question_column2 = $post-> ;postable->question_column2;
  • Semak jenis siaran yang mana: echo 'type: '.get_class($post->postable);

Mencipta Baharu Model

Melibatkan penciptaan rekod dalam kedua-dua jadual kongsi (siaran) dan jadual khusus jenis (soalan).

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

Pendekatan ini memastikan struktur pangkalan data yang lebih cekap dan menyediakan penyelesaian berskala untuk pewarisan model dalam Laravel.

Atas ialah kandungan terperinci ## Warisan Berbilang Meja dalam Laravel's Fasih: Pendekatan yang Lebih Bersih?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn