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