使用 Laravel 的 Eloquent 实现单表继承
使用数据库模型时,继承提供了一种定义相关实体的层次结构的方法。然而,在单表继承和多表继承之间进行选择时,后者通常是一种更高效、更灵活的解决方案。
单表继承
虽然概念上更简单,但单表继承继承需要将所有类型的所有列存储在单个表中,从而导致潜在的 NULL 值扩散。这可能会影响数据库性能,尤其是在处理大型数据集时。
使用 Eloquent 进行多表继承
多表继承涉及将单个表拆分为多个表,每个表对应一个具体型号类型。 Laravel 的 Eloquent 框架提供了多态关系来无缝管理这些关系。
Post 模型
所有帖子类型的基类 Post,表示共享列并定义可发布的内容多态关系:
<code class="php">class Post extends Eloquent { public function postable() { return $this->morphTo(); } }</code>
问题/文章模型
每个特定的帖子类型,如问题或文章,都从帖子扩展并定义与基本模型的 morphOne 关系:
<code class="php">class Question extends Post { public function post() { return $this->morphOne('Post', 'postable'); } }</code>
使用示例
创建新Question
创建新Question需要链接到Post表来维护多表继承:
<code class="php">$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);</code>
虽然多表继承涉及到的复杂度更高,它提供了更清晰的数据库结构,提高了性能,并为复杂关系建模提供了更大的灵活性。
有关 Laravel 中多表继承的综合教程,请参阅原始问题答案中提供的资源。
以上是**单表继承与 Eloquent 多表继承:哪一个适合您的 Laravel 应用程序?**的详细内容。更多信息请关注PHP中文网其他相关文章!