使用 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>
用法:
创建一个新问题:
建议:
为了更加用户友好的实现,建议将模型创建逻辑合并到每个模型类中的可重用函数中。
以上是如何使用 Eloquent 在 Laravel 中实现帖子的多表继承?的详细内容。更多信息请关注PHP中文网其他相关文章!