所以我想弄清楚如何使用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');
}
...
但是这样做的正确方法是什么?希望有人能够实现类似的东西并帮助我解决这个问题。