」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > **單表繼承與 Eloquent 多表繼承:哪一個適合您的 Laravel 應用程式? **

**單表繼承與 Eloquent 多表繼承:哪一個適合您的 Laravel 應用程式? **

發佈於2024-11-15
瀏覽:101

**Single Table Inheritance vs. Multi Table Inheritance with Eloquent: Which is Right for Your Laravel Application?**

使用Laravel 的Eloquent 實作單表繼承

使用資料庫模型時,繼承提供了定義相關實體的層次結構的方法。然而,在單表繼承和多表繼承之間進行選擇時,後者通常會成為更有效率、更靈活的解決方案。

單表繼承

雖然概念上更簡單,但單表繼承繼承需要將所有類型的所有列存儲在單個表中,從而導致潛在的NULL值擴散。這可能會影響資料庫效能,尤其是對於大型資料集。

Eloquent 的多表繼承

多表繼承涉及將單一表拆分為多個表,每個表對應一個特定型號類型。 Laravel 的 Eloquent 框架提供了多型關係來無縫管理這些關係。

Post 模型

所有帖子類型的基類Post,表示共享列並定義可發布的內容多態關係:

class Post extends Eloquent {
    public function postable() {
        return $this->morphTo();
    }
}

問題/文章模型

每個特定的帖子類型,如問題或文章,都從帖子擴展並定義與基本模型的morphOne 關係:

class Question extends Post {
    public function post() {
        return $this->morphOne('Post', 'postable');
    }
}

用法範例

  • 擷取所有貼文: $posts = Post::all();
  • 檢索所有問題: $questions = Question::all();
  • 從帖子中檢索特定於問題的列: $question_column = $post->postable->question_column;
  • 檢查帖子類型: echo '類型: '.get_class($post->postable);

建立新問題

建立新問題需要將其連結到Post 表以維護多問題-表繼承:

$post = new Post();
$post->shared_column = 'New Question Post';
$post->save();

$question = new Question();
$question->question_column = 'My Question';
$question->save();

$question->post()->save($post);

雖然多表繼承涉及更多複雜性,但它提供了更清晰的資料庫結構,提高了性能,並為複雜關係建模提供了更大的靈活性。

有關 Laravel 中多表繼承的綜合教程,請參閱原​​始問題解答中提供的資源。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3