Bagaimanakah anda boleh melaksanakan pewarisan jadual tunggal untuk model Artikel dan Soalan menggunakan Laravel's Eloquent, melanjutkan daripada model Post?

Barbara Streisand
Lepaskan: 2024-10-25 05:08:02
asal
590 orang telah melayarinya

How can you implement single table inheritance for Article and Question models using Laravel's Eloquent, extending from the Post model?

Melaksanakan Pewarisan Meja Tunggal Menggunakan Laravel's Eloquent

Soalan:

Diberikan model Post:

<code class="php">class Post extends Eloquent {

    // Model code...
}</code>
Salin selepas log masuk

Bagaimanakah anda boleh melaksanakan pewarisan untuk model Artikel dan Soalan, membenarkan model tersebut dilanjutkan daripada Post?

Warisan Jadual Tunggal

Warisan jadual tunggal melibatkan penyimpanan semua data model dalam satu jadual dengan lajur jenis untuk membezakan model. Walau bagaimanapun, pendekatan ini boleh membawa kepada banyak nilai NULL disebabkan oleh lajur yang tidak digunakan untuk jenis model tertentu.

Warisan Berbilang Jadual

Warisan berbilang jadual menggunakan polimorfisme, menggunakan jadual berasingan untuk setiap model sambil menyambungkannya melalui jadual rujukan. Jadual rujukan termasuk lajur seperti postable_id dan postable_type.

Persediaan Model Fasih

Dalam model Post, tentukan perhubungan morphTo:

<code class="php">public function postable(){
    return $this->morphTo();
}</code>
Salin selepas log masuk

Dalam model Soalan (serupa dengan Artikel):

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

Penggunaan:

  • Dapatkan semula semua siaran: Post::all()
  • Dapatkan semula semua soalan: Soalan::all()
  • Dapatkan butiran soalan daripada siaran: $question_column2 = $post->postable->question_column2
  • Semak jenis siaran: if( $post->postable instanceof Question)
  • Buat soalan baharu:
<code class="php">$post = new Post();
$post->shared_column = 'New Question Post';
$post->save();

$question = new Question();
$question->question_column = 'test';
$question->post()->save($post);</code>
Salin selepas log masuk

Kesimpulan

Pewarisan jadual berbilang menawarkan struktur pangkalan data yang lebih cekap berbanding pewarisan jadual tunggal. Ia memerlukan logik model tambahan, tetapi ia menyediakan pendekatan yang lebih fleksibel dan berskala untuk mengendalikan warisan model dalam Laravel's Eloquent.

Atas ialah kandungan terperinci Bagaimanakah anda boleh melaksanakan pewarisan jadual tunggal untuk model Artikel dan Soalan menggunakan Laravel's Eloquent, melanjutkan daripada model Post?. 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