首页  >  文章  >  数据库  >  如何使用 Eloquent 在 Laravel 中实现帖子的多表继承?

如何使用 Eloquent 在 Laravel 中实现帖子的多表继承?

Linda Hamilton
Linda Hamilton原创
2024-10-25 04:40:30138浏览

How to Implement Multi-Table Inheritance for Posts in Laravel Using Eloquent?

使用 Eloquent 在 Laravel 中实现单表继承

场景:

你有一个模型名为 Post 并希望使用继承将帖子分为两种类型:文章和问题。

单表继承

单表继承涉及在同一个表中维护所有类型,用一列来区分它们。虽然这种方法可以更简单,但由于列不适用于所有类型,它可能会导致大量 NULL 值。

多表继承

多表继承是一种更清晰的方法,它将数据拆分到多个表中。 postable 列表示帖子的类型,postable_id 引用对应表中的主键。

在 Eloquent 中实现多表继承

帖子模型:

向 Post 模型添加可发布关系,这将是多态关系:

<code class="php">class Post extends Eloquent {
    public function postable() {
        return $this->morphTo();
    }
}</code>

问题和文章模型:

为每个帖子类型创建单独的模型,并与帖子模型建立关系:

<code class="php">class Question extends Post {
    public function post() {
        return $this->morphOne('Post', 'postable');
    }
}</code>
<code class="php">class Article extends Post {
    public function post() {
        return $this->morphOne('Post', 'postable');
    }
}</code>

用法:

  • 检索所有帖子: Post::all().
  • 检索所有问题: Question::all().
  • 从 Post 对象访问相关问题属性:$post->postable->question_column .
  • 确定帖子类型:get_class($post->postable)。
  • 创建一个新问题:

    • 同时创建一个问题和Post 对象。
    • 使用 $question->post()->save($post) 链接它们。

建议:

为了更加用户友好的实现,建议将模型创建逻辑合并到每个模型类中的可重用函数中。

以上是如何使用 Eloquent 在 Laravel 中实现帖子的多表继承?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn