Laravel Eloquent 中的多表繼承
實現單表繼承聽起來像是擴展模型的一個方便的解決方案,但它有一些缺點,例如由於查詢特定列時存在大量NULL 值和複雜性,資料庫大小增加。相反,多表繼承提供了更簡潔的方法。
架構設計
為每個模型類型的共用欄位和唯一欄位建立單獨的表。例如:
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為每個可發布類型建立 問題
等子模型。用法
<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中文網其他相關文章!