如何在Laravel中的特定索引号处将对象(模型类型对象)插入到Collection对象中?

时间:2014-12-10 09:14:16

标签: php laravel collections laravel-4 eloquent

我读过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对象中严格使用此输出。

2 个答案:

答案 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();

  }