我读过Dayle Rees的Code Bright以了解更多关于Laravel中使用的Eloquent Collection
的信息。其他一些研究也没有找到我想要的答案。
我想将对象(Model
类型对象)插入到特定位置的Collection
对象中。
例如:
这是返回的集合
Illuminate\Database\Eloquent\Collection Object
(
[0] => Attendance Object
([present_day] => 1)
[1] => Attendance Object
([present_day] => 2)
[2] => Attendance Object
([present_day] => 4)
[3] => Attendance Object
([present_day] => 5)
)
正如您所见,[present_day]
的值范围为1 to 5
,但序列中缺少值3
。现在,我真正想要做的是,我想明确地在Attendance Object
索引编号/位置的收集对象位置放置一个新的[2]
,从而推动其余的出席宾语。我真的很难做到这一点。我怎样才能使上面的集合对象看起来如下所示:
Illuminate\Database\Eloquent\Collection Object
(
[0] => Attendance Object
([present_day] => 1)
[1] => Attendance Object
([present_day] => 2)
[2] => Attendance Object // This is where new object was added.
([present_day] => 3)
[4] => Attendance Object
([present_day] => 4)
[5] => Attendance Object
([present_day] => 5)
)
我认为如果是数组,有一些方法可以完全像这样做。由于这是Collection
,我不知道该怎么做。
注意:我不想将其转换为数组并在数组中进行插入。出于某种原因,我希望在Collection
对象中严格使用此输出。
答案 0 :(得分:13)
要将项目插入集合,请参阅此答案; Answer
基本上,拆分集合,在相关索引处添加项目。
您可以使用Eloquent\Collection
方法将项目添加到add
对象;
$collection->add($item); // Laravel 4
或
$collection->push($item); // Laravel 5
然后,您可以使用sortBy
方法重新排序集合;
$collection = $collection->sortBy(function($model){ return $model->present_day; });
这会根据您的present_day
属性重新排序集合。
请注意,只有在使用Illuminate\Database\Eloquent\Collection
时,上述代码才有效。如果您使用普通Eloquent\Support\Collection
,则没有add
方法。
相反,您可以使用空数组偏移量,与在普通数组中插入新元素相同:
$collection[] = $item;
此表单也适用于Collection
的Eloquent版本。
答案 1 :(得分:0)
put方法设置集合中的给定键和值:
function jarPath(){
variables.jarPath = createObject( "java", "java.io.File" ).init(
createObject( "java", "runwar.LaunchUtil" )
.getClass()
.getProtectionDomain()
.getCodeSource()
.getLocation()
.toURI()
.getSchemeSpecificPart() )
.getAbsolutePath();
job.start(serialize(variables.jarPath));
job.complete();
}