Php 实现一个可以有许多其他模型的模型
我正在尝试实现一个模型,它的行为就像一个文件夹,可以包含其他不同类型的模型。我如何实现这一点 这是我拥有的数据库(为了举例而简化): 我希望能够完成Php 实现一个可以有许多其他模型的模型,php,laravel,eloquent,Php,Laravel,Eloquent,我正在尝试实现一个模型,它的行为就像一个文件夹,可以包含其他不同类型的模型。我如何实现这一点 这是我拥有的数据库(为了举例而简化): 我希望能够完成$folder->elements并获得文件夹元素中所有图像和视频的集合 为此,我考虑使用如下透视表: folder_elements folder_id - integer element_id - integer element_type -string 使用Laravel提供的morphMany关系,但我认为(根据文档
$folder->elements
并获得文件夹
元素中所有图像
和视频
的集合
为此,我考虑使用如下透视表:
folder_elements
folder_id - integer
element_id - integer
element_type -string
使用Laravel提供的morphMany关系,但我认为(根据文档中的示例)应该反过来使用(当一个元素属于不同的其他元素时,而不是当一个元素具有不同的其他元素时)
有人能帮我做到这一点吗?我想你已经了解了如何设置这些关系:
class Folder hasMany Images
class Folder hasMany Videos
那么
我没有测试它,但你明白了。是的,你是对的,它是多对一关系,许多元素属于一个文件夹->每个元素(图像/视频)都包含一个外键,该外键引用它所属文件夹的id。@catcon但如果是这种情况,你必须为每个关系创建一个方法。因此,为了有一个返回包含所有元素的集合的方法,我必须创建另一个合并它们的集合吗?另外,在这种情况下,项目可以同时属于不同的文件夹,这就是我考虑多对多关系的原因。@Flerex这是真的-如果您想返回组合集合,应该使用
->merge()
,但是等等,您返回像['images'=>ImagesCollection,'videos'=>videoscocollection]这样的集合如何;代码>-也许这样更好approach@senty这也会起作用,事实上它更好,因为列表中没有混合对象。
class Folder hasMany Images
class Folder hasMany Videos
public function folderFiles() {
return new Collection([
'images' => $this->images,
'videos' => $this->videos
]);
}