与Laravel的多态关系

时间:2019-10-08 15:15:48

标签: laravel

我有可以属于帖子和评论的照片,所以我创建了photos table,其中包含这些列

- photable_id
- photable_type
- user_id
- file_name

问题是:如果我有一张属于某个帖子的照片,而同一张照片属于另一个帖子或评论怎么办?

1 个答案:

答案 0 :(得分:-1)

您可以创建表photos, 另一个具有这些列的表photoables

photo_id
photoable_id
photoable_type

因此photo_id列与id表中的photos相关。

然后在您的Photo model中:

// Get rid of this function 
public function morphTo();
// Then add these two methods
public function posts() 
{
    return $this->morphedByMany(Post::class);
}

public function comments() 
{
    return $this->morphedByMany(Comment::class);
}

最后,您的Post ModelComment Model应该使用photoable方法

public function photoable() 
{

    return $this->morphToMany(Photo::class, 'photable'); // instead of morphMany()
}