使用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');
}
}
用法範例
建立新問題
建立新問題需要將其連結到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