Arrays 如何将数组值附加到laravel中的集合中?

Arrays 如何将数组值附加到laravel中的集合中?,arrays,laravel-5,append,Arrays,Laravel 5,Append,我有一个名为$dataItemregistrationdetail的查询集合: $dataItemregistrationdetail = DB::table('itemregistrationdetail') ->join('sections', 'itemregistrationdetail.sectionid', '=', 'sections.sectionid')

我有一个名为$dataItemregistrationdetail的查询集合:

     $dataItemregistrationdetail = DB::table('itemregistrationdetail')
                                    ->join('sections', 'itemregistrationdetail.sectionid', '=', 'sections.sectionid')
                                    ->join('categories', 'itemregistrationdetail.categoryid', '=', 'categories.categoryid')
                                    ->join('kategori_kursus', 'itemregistrationdetail.kategoriid', '=', 'kategori_kursus.kategoriid')
                                    ->join('devices', 'itemregistrationdetail.deviceid', '=', 'devices.deviceid')
                                    ->select('itemregistrationdetail.*', 'sections.sectionname', 'categories.categoryname', 'kategori_kursus.kategorikursus', 'devices.kursusname')
                                    ->where('itemregistrationdetail.itemregistrationid', $id)
                                    ->get();
此集合输出以下内容:

 Collection {#557 ▼
 #items: array:4 [▼
  0 => {#552 ▼
  +"ItemRegistrationDetailID": 64852
  +"ItemRegistrationID": 194
  +"SectionID": 1
  +"CategoryID": 1
  +"KategoriID": 1
  +"DeviceID": 1129
  +"BrandID": 0
  +"ModelID": 0
  +"SerialNo": "SEKOLAH MENENGAH"
  +"StatusID": 1
  +"Imei": "MAKTAB PERGURUAN"
  +"No_tel": ""
  +"Comments": ""
  +"daymula_kursus": 9
  +"monthmula_kursus": "May"
  +"yearmula_kursus": 2011
  +"daytamat_kursus": 28
  +"monthtamat_kursus": "July"
  +"yeartamat_kursus": 2011
  +"sectionname": "I91"
  +"categoryname": "GURU BESAR"
  +"kategorikursus": "KURSUS (UMUM)"
  +"kursusname": "KURSUS ASAS"
  }
   1 => {#549 ▶}
   2 => {#555 ▶}
   3 => {#558 ▶}
 ]
}
我有另一个日期数组。数组的值是$dataItemregistration的每个元素的日期。名为$datatarikhMula的日期数组:

 $datatarikhMula = DB::table('itemregistrationdetail')
                  ->select('itemregistrationdetail.daymula_kursus', 'itemregistrationdetail.monthmula_kursus', 'itemregistrationdetail.yearmula_kursus')
                  ->where('itemregistrationdetail.itemregistrationid', $id)
                  ->get();
我已将上述集合格式化为此数组:

    //**************** format the value of the date************************  
    $dates = json_decode($datatarikhMula, true); 

    $dataTarikhMula = array();

    foreach($dates as $date)
    {
        $dataTarikhMula[] = implode(' ', array_values($date));
    }
数组dataTarikhMula的输出为:

  array:4 [▼
  0 => "9 May 2011"
  1 => "24 0 2013"
  2 => "12 0 2013"
  3 => "7 April 2014"
  ]
我需要将每个日期附加到每个dataItemregistrationdetail行,以便dataItemregistrationdetail中包含名为date的额外属性,该属性包含dataTarikhMula数组中的值。 因此,它将输出如下:

   Collection {#557 ▼
 #items: array:4 [▼
  0 => {#552 ▼
  +"ItemRegistrationDetailID": 64852
  +"ItemRegistrationID": 194
  +"SectionID": 1
  +"CategoryID": 1
  +"KategoriID": 1
  +"DeviceID": 1129
  +"BrandID": 0
  +"ModelID": 0
  +"SerialNo": "SEKOLAH MENENGAH"
  +"StatusID": 1
  +"Imei": "MAKTAB PERGURUAN"
  +"No_tel": ""
  +"Comments": ""
  +"daymula_kursus": 9
  +"monthmula_kursus": "May"
  +"yearmula_kursus": 2011
  +"daytamat_kursus": 28
  +"monthtamat_kursus": "July"
  +"yeartamat_kursus": 2011
  +"sectionname": "I91"
  +"categoryname": "GURU BESAR"
  +"kategorikursus": "KURSUS (UMUM)"
  +"kursusname": "KURSUS ASAS"
  +"date": "9 May 2011"  <------------------added value
  }
   1 => {#549 ▶}
   2 => {#555 ▶}
   3 => {#558 ▶}
 ]
}
})


但错误如下所示。

您可以为每个集合项添加新元素,如下所示:

$dataItemregistrationdetail->map(function ($detail, $key) use ($dataTarikhMula) {
    $detail->date = $dataTarikhMula[$key] ?? null;
    return $detail;
});
不过我不确定这对你来说是不是最好的方式。您已经拥有集合中的所有日期数据,为什么需要第二个查询来构建日期数组。您可以这样做:

$dataItemregistrationdetail->map(function ($detail) {
    $detail->date = "{$detail->daymula_kursus} {$detail->monthmula_kursus} {$detail->yearmula_kursus}";
    return $detail;
});

这样,您就不需要第二个数组。

它给出了一个错误,即不能将stdClass类型的对象用作数组,以备稍后的repy..昨天出去。我编辑了这个问题,提到了给出错误的部分代码。所以,很抱歉,我错误地编辑了错误的部分。我刚刚用新的代码替换了问题。我更新了我的答案,你能再试一次吗。错误在于将属性设置为$detail['date'],而不是$detail->date。非常感谢@Remul提供了出色的解决方案。您是对的,不必单独对其进行内爆,只需在数组映射函数中对其进行简化即可。我已经尝试了很多天…错误->无法使用stdClass类型的对象作为数组
$dataItemregistrationdetail->map(function ($detail) {
    $detail->date = "{$detail->daymula_kursus} {$detail->monthmula_kursus} {$detail->yearmula_kursus}";
    return $detail;
});