如何在Laravel中实现子模型


how to implement sub model in Laravel

我的基类是post以及许多子模型,如:视频帖子、图像帖子所有类都具有特定的属性&继承父属性&所有类都需要特定的行为

问题

当在post模型上查找结果时,给出了超级模型(post)实例,这是错误的我需要子模型的实例

如果我正确理解你,你需要关系

hasMany关系添加到您的Post.php模型:

public function videos()
    return $this->hasMany(App'PostVideo::class);
}

只要你的post_video表有一个引用帖子的post_id列,你就可以这样调用这种关系:

foreach($post->videos as $video) {
    // Do something
}

与的反比关系:

为您的PostVideo.php模型添加关系:

public function post() {
    return $this->belongsTo(App'Post::class);
}

当然,如果你有视频,你可以通过以下操作访问它所属的帖子:

$video->post

看起来您想要一个单独的表继承。在laravel中,这可以手动完成,也可以使用像nanigans或intrip这样的包。要手动使用单表继承,我建议您先阅读这个stackoverflow问题。但是,请注意,单表继承将所有都放在一个表中,但由具有不同行为的几个模型引用。如果这不是你想要的,只需使用简单而雄辩的查询和模型——开心果已经解释过了。