首页 > 解决方案 > 我可以将 laravel 集合作为模型吗?或其他方式制作“收藏模型”?

问题描述

我目前使用 laravel 5.8。有没有办法将Illuminate\Support\Collection对象作为模型?目标是创建一个模型,该模型也可用作集合,并且该模型上将存在多态关系。我无法得到它的清晰图片。

就在写这个问题之前,我尝试扩展模型类本身并在里面存储一个集合。操作收藏品时感觉有些笨拙。如果我希望我的模型和收藏一样工作,我应该怎么做?


编辑 A - 实际问题

显然,这个问题在某种程度上是不恰当的。我实际上想要做的是存储列表。该列表包含几个模型扩展对象和其他列表对象,如下所示。

$parentCollection = [
    1,
    2,
    childCollection = [ 3a, 3b, 3c, collection3d = [], ... ],
    , ...
]

我必须处理嵌套集合和集合本身。存储它,加载它.. 之类的东西。


编辑 B - 自身的嵌套集合

感谢评论。我看到嵌套集合本身已经从您的评论中解决了。当我尝试这个时,首先,我创建了一个名为 的类TypeTest它们是Model类的扩展并且它包装了Doctrine\Common\Collections\ArrayCollection. 那两者TypeTest与其实体类有着多态关系CollectionItem

这种方式立即导致两个问题。(1) 我不能在Type课堂上直接操作收集数据。(2) 如果我想要我的Type,Test会有其他Type的,Test或者可能的其他多态相关的集合,那我怎么想不通。

原谅我拙劣的解释。英语不是我的语言,所以总是很难写出我认为是一种艰苦的工作。

标签: laravelcollectionsmodel

解决方案


尝试在您的数据库中创建一个视图并为它制作一个模型,就像一个普通的表一样。

您需要在模型中使用此设置:

protected $table = 'name_of_view';

要在迁移中创建视图,请使用以下内容:

// up method
DB::raw('create or replace view name_of_view ....');

// down method
DB::raw('drop if exists view name_of_view ...');

推荐阅读