Как добавить значение массива в коллекцию в laravel? - PullRequest
0 голосов
/ 23 октября 2018

У меня есть коллекция из запроса с именем $ 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?

Я отредактировал код в предложенном вами коде:

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

});

Но ошибка появляется, как прокомментировано ниже.

1 Ответ

0 голосов
/ 23 октября 2018

Вы можете добавить новый элемент для каждого элемента коллекции следующим образом:

$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;
});

, так что вам не нужен второй массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...