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

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

Barbara Streisand
Lepaskan: 2024-10-27 01:59:30
asal
616 orang telah melayarinya

## 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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan