我正在尝试实现一个模型,该模型可以作为一个文件夹,可以包含其他不同类型的模型。我该如何实现呢?
这是我的数据库(简化示例):
images
id - integer
name - string
format - string
videos
id - integer
name - string
length - integer
codec - string
folder
id - integer
name - string
我希望能够做$folder->elements
并获得Image
元素中所有Video
s和Folder
s的集合。
为此,我正在考虑如下的数据透视表:
folder_elements
folder_id - integer
element_id - integer
element_type -string
并使用Laravel提供的morphMany关系,但我认为(根据文档中的示例)它应该以相反的方式使用(当元素属于不同的其他元素时,而不是当元素具有不同的其他元素时) 。
任何人都可以帮我完成这个吗?
我假设您已了解如何设置这些关系:
class Folder hasMany Images
class Folder hasMany Videos
然后,
public function folderFiles() {
return new Collection([
'images' => $this->images,
'videos' => $this->videos
]);
}
我没有测试它,但你明白了。