【问题标题】:Laravel: One relation, multiple modelsLaravel:一个关系,多个模型
【发布时间】:2018-04-15 08:45:09
【问题描述】:
我有一个模型“用户”,每个用户都有“帖子”。现在有不同类型的帖子,例如“TextPost”、“VideoPost”等。
我想像这样获取用户的所有帖子:
$user->posts()->get()
这应该返回一个具有正确类的对象数组,例如像这样的数组:
[App\VideoPost{}, App\TextPost{}]
我尝试使用文档中描述的多态关系,但它不起作用。有任何想法吗?
【问题讨论】:
标签:
php
laravel
polymorphism
relationship
【解决方案1】:
对于您的特定用例,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 调用。