首頁  >  文章  >  資料庫  >  ## Laravel 的 Eloquent 中的多表繼承:一種更簡潔的方法?

## Laravel 的 Eloquent 中的多表繼承:一種更簡潔的方法?

Barbara Streisand
Barbara Streisand原創
2024-10-27 01:59:30516瀏覽

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

Laravel Eloquent 中的多表繼承

實現單表繼承聽起來像是擴展模型的一個方便的解決方案,但它有一些缺點,例如由於查詢特定列時存在大量NULL 值和複雜性,資料庫大小增加。相反,多表繼承提供了更簡潔的方法。

架構設計

為每個模型類型的共用欄位和唯一欄位建立單獨的表。例如:

  • 貼文(shared_column)
  • 問題(question_column,question_column2)
  • 問題
  • (question_column,question_column2) (article_column,article_column2)

Eloquent 模型

定義Post

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

Post

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

定義

Post
  • 定義
  • Post
  • 定義
  • Post
  • 為每個可發布類型建立 問題

    等子模型。

    用法

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

擷取所有問題: $posts = Post::all();

擷取所有問題:$ questions = Question::all();從貼文中取得問題列:$question_column2 = $post-> ;postable->question_column2;檢查貼文的類型: echo 'type: '.get_class($post->postable);建立新帖子模型涉及在共享表(帖子)和特定類型表(問題)中建立記錄。 這種方法確保了更有效率的資料庫結構,並為 Laravel 中的模型繼承提供了可擴展的解決方案。

以上是## Laravel 的 Eloquent 中的多表繼承:一種更簡潔的方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn