Как добавить массив внутри массива на основе условия PHP?

#php #laravel #collections

Вопрос:

У меня есть коллекция laravel ниже из: $unitinventory = DB::select('call wh_inventory_list(?)', array('Units'));

 [
   {
      "unit_id":"UCL2100001",
      "rr_id":"RR2100001",
      "make":"FAW",
      "chassis_no":"LFWSRXRJ9M1E00004",
      "engine_no":"CA6DM2-42E5153558354",
      "body_type":"TRACTOR HEAD",
      "horse_power":"420HP",
      "cabin_type":"J6P E5",
      "numwheels":"6W",
      "unit_status":"Available",
      "unit_location":null
   },
   {
      "unit_id":"UCL2100002",
      "rr_id":"RR2100002",
      "make":"FAW",
      "chassis_no":"LFWSRXRJ4M1E00007",
      "engine_no":"CA6DM2-42E5153563283",
      "body_type":"TRACTOR HEAD",
      "horse_power":"420HP",
      "cabin_type":"J6P E5",
      "numwheels":"6W",
      "unit_status":"Available",
      "unit_location":null
   }
]
 

И еще одна коллекция: $modifification = collect(DB::table('pd_jo_bodymodification')->get());

 [
   {
      "row_id":2,
      "jo_id":"JO2100003",
      "jo_chassisno":"LFWSRXRJ4M1E00007",
      "jo_convertedbody":"1st conversion",
      "jo_mileage":"test",
      "jo_serviceadvisor":"test",
      "jo_servicerequest":"test",
      "jo_remarks":"test"
   },
   {
      "row_id":4,
      "jo_id":"JO2100004",
      "jo_chassisno":"LFWSRXRJ4M1E00007",
      "jo_convertedbody":"2nd conversion",
      "jo_mileage":"test",
      "jo_serviceadvisor":"test",
      "jo_servicerequest":"test",
      "jo_remarks":"test"
   },
   {
      "row_id":4,
      "jo_id":"JO2100004",
      "jo_chassisno":"LDFDRETFGGF000RE",
      "jo_convertedbody":"OTHER CONVERSION",
      "jo_mileage":"test",
      "jo_serviceadvisor":"test",
      "jo_servicerequest":"test",
      "jo_remarks":"test"
   }
]
 

Я хочу выяснить, есть ли у $unitinventory->chassis_no история изменений, поэтому я сделал это:

 foreach ($unitinventory as $key => $value) {
      $tmpmodif["conversion"] = $modifification->where('jo_chassisno',$value->chassis_no);
}
 

Which returns the following:

 {
   "conversion":[
      {
         "row_id":2,
         "jo_id":"JO2100003",
         "jo_chassisno":"LFWSRXRJ4M1E00007",
         "jo_convertedbody":"1st conversion",
         "jo_mileage":"test",
         "jo_serviceadvisor":"test",
         "jo_servicerequest":"test",
         "jo_remarks":"test"
      },
      {
         "row_id":4,
         "jo_id":"JO2100004",
         "jo_chassisno":"LFWSRXRJ4M1E00007",
         "jo_convertedbody":"2nd conversion",
         "jo_mileage":"test",
         "jo_serviceadvisor":"test",
         "jo_servicerequest":"test",
         "jo_remarks":"test"
      }
   ]
}
 

Теперь я хочу добавить историю конверсий в $unitinventory коллекцию, чтобы она выглядела так:

 $unitinventory = 
[
   {
      "unit_id":"UCL2100001",
      "rr_id":"RR2100001",
      "make":"FAW",
      "chassis_no":"LFWSRXRJ9M1E00004",
      "engine_no":"CA6DM2-42E5153558354",
      "body_type":"TRACTOR HEAD",
      "horse_power":"420HP",
      "cabin_type":"J6P E5",
      "numwheels":"6W",
      "unit_status":"Available",
      "unit_location":null,
      "conversion":[]
   },
   {
      "unit_id":"UCL2100002",
      "rr_id":"RR2100002",
      "make":"FAW",
      "chassis_no":"LFWSRXRJ4M1E00007",
      "engine_no":"CA6DM2-42E5153563283",
      "body_type":"TRACTOR HEAD",
      "horse_power":"420HP",
      "cabin_type":"J6P E5",
      "numwheels":"6W",
      "unit_status":"Available",
      "unit_location":null,
      "conversion":[
         {
            "row_id":2,
            "jo_id":"JO2100003",
            "jo_chassisno":"LFWSRXRJ4M1E00007",
            "jo_convertedbody":"1st conversion",
            "jo_mileage":"test",
            "jo_serviceadvisor":"test",
            "jo_servicerequest":"test",
            "jo_remarks":"test"
         },
         {
            "row_id":4,
            "jo_id":"JO2100004",
            "jo_chassisno":"LFWSRXRJ4M1E00007",
            "jo_convertedbody":"2nd conversion",
            "jo_mileage":"test",
            "jo_serviceadvisor":"test",
            "jo_servicerequest":"test",
            "jo_remarks":"test"
         }
      ]
   }
]
 

Как сделать это возможным? Спасибо!

Комментарии:

1. С красноречивыми моделями и отношениями это было бы уже заранее подготовлено.

2. Как называются ваши таблицы, это можно решить с помощью красноречивых моделей.

Ответ №1:

Я решаю проблему с помощью этого подхода:

 foreach ($tmpmodif as $key => $value) {
    $unitinventory[$key] = array_merge(  (array)$value,   (array)["conversion"=>$modifification->where('jo_chassisno',$value->chassis_no)]);
}
 

Объединение массива внутри foreach .