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