首页  >  文章  >  数据库  >  如何使用 Laravel 的 Eloquent(从 Post 模型扩展)实现 Article 和 Question 模型的单表继承?

如何使用 Laravel 的 Eloquent(从 Post 模型扩展)实现 Article 和 Question 模型的单表继承?

Barbara Streisand
Barbara Streisand原创
2024-10-25 05:08:02505浏览

How can you implement single table inheritance for Article and Question models using Laravel's Eloquent, extending from the Post model?

使用 Laravel 的 Eloquent 实现单表继承

问题:

给定 Post 模型:

<code class="php">class Post extends Eloquent {

    // Model code...
}</code>

如何实现 Article 和 Question 模型的继承,允许它们从 Post 扩展?

单表继承

单表继承涉及存储所有模型数据在带有类型列的单个表中以区分型号。但是,由于特定模型类型未使用列,这种方法可能会导致大量 NULL 值。

多表继承

多表继承采用多态性,利用单独的表来实现每个模型,同时通过参考表将它们连接起来。参考表包括 postable_id 和 postable_type 等列。

Eloquent 模型设置

在 Post 模型中,定义 morphTo 关系:

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

在问题模型中(与文章类似):

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

用法:

  • 检索所有帖子:Post::all()
  • 检索所有问题: Question::all()
  • 从帖子中获取问题详细信息:$question_column2 = $post->postable->question_column2
  • 检查帖子类型:if( $post->postable instanceof 问题)
  • 创建一个新问题:
<code class="php">$post = new Post();
$post->shared_column = 'New Question Post';
$post->save();

$question = new Question();
$question->question_column = 'test';
$question->post()->save($post);</code>

结论

多表继承提供了与单表继承相比,更高效的数据库结构。它需要额外的模型逻辑,但它提供了一种更灵活和可扩展的方法来处理 Laravel 的 Eloquent 中的模型继承。

以上是如何使用 Laravel 的 Eloquent(从 Post 模型扩展)实现 Article 和 Question 模型的单表继承?的详细内容。更多信息请关注PHP中文网其他相关文章!

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