”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > **单表继承与 Eloquent 多表继承:哪一个适合您的 Laravel 应用程序?**

**单表继承与 Eloquent 多表继承:哪一个适合您的 Laravel 应用程序?**

发布于2024-11-15
浏览:775

**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