通过数据透视表与几个表的关系

时间:2018-01-10 12:27:59

标签: php laravel laravel-5

用户可以将文件附加到帖子:图片或视频。

数据库的结构如下:

posts
   id
images
   id
videos
   id
post_attachment
   post_id
   attachment_id (id from images or videos table)
   attachment_type ('image' or 'video')

困难在于,根据附件的类型,我们应该引用不同的表格

我应该将laravel函数的哪些关系应用于Post模型以通过post_attachment表获取所有附件?

我认为这种关系来自一系列变形,但我无法准确理解哪一种。

class Post {
     public function attachments () {
        return $this->morph?????
     }
}

请帮我写下这个案子的正确关系。

1 个答案:

答案 0 :(得分:1)

您可能根本不需要数据透视表,例如,您可以使用AttachmentVideohasMany()之间创建关系。或者,为了简化数据库结构,我会在PostAttachment模型

下组织所有内容

一个例子是:

class Post extends Model
{
    public function attachment(){
        return $this->hasMany(Attachment::class);
    }
}

和你的附件模型:

class Attachment extends Model
{
    public function post(){
        return $this->belongsTo(Post::class);
    }
}

也许在您的桌子上,有一个字段,指定允许的不同类型的附件:

$table->enum('attachment_type', ['video', 'image']);