我有一个模型“用户”,每个用户都有“帖子”。现在有不同类型的帖子,如“TextPost”,“VideoPost”等。
我希望得到像这样的用户的所有帖子:
$user->posts()->get()
这应该返回具有正确类的对象数组,例如像这样的数组:
[App\VideoPost{}, App\TextPost{}]
我尝试使用文档中描述的多态关系,但它不起作用。有任何想法吗?
答案 0 :(得分:0)
对于您的特定用例,Laravel中没有真正的关系类型。在这种情况下,您可以做的最简单的事情是为每个帖子类型创建一个单独的hasMany关系,然后编写一个返回所有结果组合的函数。
因此,您最终会在User类中找到类似的内容:
public function videoPosts()
{
return $this->hasMany(App\VideoPost::class);
}
public function textPosts()
{
return $this->hasMany(App\TextPost::class);
}
public function getPosts()
{
return $this->textPosts->concat($this->videoPosts);
}
然后,您可以继续为您可能要添加的其他所有帖子类型链接concat调用。