Laravel:一种关系,多种模式

时间:2017-11-02 18:02:33

标签: php laravel polymorphism relationship

我有一个模型“用户”,每个用户都有“帖子”。现在有不同类型的帖子,如“TextPost”,“VideoPost”等。

我希望得到像这样的用户的所有帖子:

$user->posts()->get()

这应该返回具有正确类的对象数组,例如像这样的数组:

[App\VideoPost{}, App\TextPost{}]

我尝试使用文档中描述的多态关系,但它不起作用。有任何想法吗?

1 个答案:

答案 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调用。