Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 实现一个可以有许多其他模型的模型_Php_Laravel_Eloquent - Fatal编程技术网

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
   ]);
}