考虑以下Eloquent docs多态示例作为起点: (https://laravel.com/docs/5.5/eloquent-relationships#polymorphic-relations)
在这种变化中,它有点反方向。用户有很多媒体。媒体是多态的,可以是任何模型。
目标是能够查询User->media
关系并返回相应的post
和video
模型。
问题:目前我获得post
或video
模型的唯一方法是查询mediable
关系:User->media->mediable
。为了映射多态模型,我们需要媒体表,其中记录了media_id和media_type。
HasManyThrough关系似乎是逻辑解决方案,但似乎必须知道所需的模型类型。
有没有办法达到我想要的效果?
DB:
user
id
posts
id - integer
title - string
body - text
videos
id - integer
title - string
url - string
medias
id - integer
user_id - integer
media_id - integer
media_type - string
型号:
class User
public function media()
{
return $this->hasMany('App\Media');
}
class Media
public function mediable()
{
return $this->morphTo();
}
class Post
public function Media()
{
return $this->morphMany('App\Media', 'mediable');
}
class Videos
public function Media()
{
return $this->morphMany('App\Media', 'mediable');
}