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

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

Barbara Streisand
Barbara Streisandasal
2024-10-25 05:08:02505semak imbas

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>

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>

Dalam model Soalan (serupa dengan Artikel):

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

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>

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!

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