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

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

Barbara Streisand
發布: 2024-10-27 01:59:30
原創
618 人瀏覽過

## 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板