实施可以具有许多其他模型的模型

时间:2019-03-25 12:23:45

标签: php laravel eloquent

我正在尝试实现一个行为类似于文件夹的模型,该文件夹可以包含其他不同类型的模型。我该如何实施?

这是我拥有的数据库(为便于说明):

images
    id - integer
    name - string
    format - string

videos
    id - integer
    name - string
    length - integer
    codec - string

folder
    id - integer
    name - string

我希望能够进行$folder->elements并获得Image元素中所有VideoFolder的集合。

为此,我正在考虑如下所示的数据透视表:

folder_elements
    folder_id - integer
    element_id - integer
    element_type -string

并使用Laravel提供的morphMany关系,但我认为(根据文档上的示例)应该以相反的方式使用(当一个元素属于不同的其他元素时,而不是当一个元素具有不同的元素时)其他元素)。

有人可以帮助我实现这一目标吗?

1 个答案:

答案 0 :(得分:1)

我认为您已经了解如何设置这些关系:

class Folder hasMany Images
class Folder hasMany Videos

然后

public function folderFiles() {
   return new Collection([
      'images' => $this->images,
      'videos' => $this->videos
   ]);
}

我没有测试它,但是你明白了。