Laravel Polymorph Attachement

时间:2016-02-09 16:45:38

标签: php laravel many-to-many attachment polymorphic-associations

所以我想弄清楚如何使用laravel框架构造一个可附加对象,因为它们实现了多态关系。

我的场景如下:我有一个Object,我们称之为Attachable-Object。你可以附加不同类型的对象,我们称之为Attachement-Object。例如,您保存了一个图像,并希望将其附加到不同的广告,个人资料,博客文章等。

因此理论上应该有一个具有以下结构的表:

 id | attachable_id | attachable_type | attachment_id | attachable_type | ...
 1  |             1 |   advertisement |             1 |           image | ...
 1  |             2 |         profile |             1 |           image | ...
 1  |             1 |   advertisement |             3 |           video | ...

这种结构非常可扩展,因为您不需要在其他表中添加额外的列或为多对多关系创建表。

第一个问题 :如果您想将附件添加到您不知道的类型的对象,这个结构是个好主意吗?

目前我想知道如何使用laravel框架中的多态关系来实现它。我知道可以将它用于一对一或多对多的多态关系。但我能找到的只有可标记或注释的场景,你可以准确指定可附加对象。

第二个问题 :如何以多态关系的laravel方式实现这一点?它甚至可能吗?

我想应该有一个附件模型,它将实现这两​​种方式:

// Attachment Class
...
public function attachable(){
    return $this->morphTo();
}
public function attachment(){
    return $this->morphTo();
}
...


// Advertisement Class
...
public function attachement(){
    return $this->morphOne('App\Attachment', 'attachment');
}
...

// Image Class
...
public function attachable(){
    return $this->morphOne('App\Attachment', 'attachable');
}
...

但是这样做的正确方法是什么?希望有人能够实现类似的东西并帮助我解决这个问题。

0 个答案:

没有答案