Как сгруппировать поля в отдельные сущности
Я делаю запрос к одной таблице, в которой мне нужно сгрупировать поля в отдельные сущьности:
public function getOrderCharts()
{
$data = Order::select(
*some fields*
...
...
)->distinct()
->where('client_id', '=', auth()->id())
->where('delivery_type', '=', 0)
->get();
$requisites = array();
foreach($data as $item){
$requisites = (array)json_decode($item->requisites, true);
$carrier = new CounterpartyStructure((array)Arr::get($requisites, 'carrier'));
$item->carrier = $carrier->toArray();
$counterparty = new CounterpartyStructure((array)Arr::get($requisites, 'counterparty'));
$item->counterparty = $counterparty->toArray();
$payer_transport = new CounterpartyStructure((array)Arr::get($requisites, 'payer_transport'));
$item->payer_transport = $payer_transport->toArray();
unset($item->requisites);
}
if(empty($data)) {
return response()->json(['data' => $data, 'message' => 'data is empty', 'success' => false], 400);
}
return response()->json(['data' => $data, 'message' => '', 'success' => true], 200);
}
Так выглядит мой ответ
"data": [
{
"driver_last_name": "123",
"driver_first_name": "123",
"driver_middle_name": "123",
"driver_phone": "+7 (123) 546-45-54",
"driver_passport_serial": "123",
"driver_passport_num": "123",
"driver_passport_issued_by": "тест",
"driver_passport_issued_date": "2021-11-05",
"tractor_mark": "123",
"tractor_model": "123",
"tractor_number": "123",
"tractor_region": "123",
"trailer_mark": "123",
"trailer_model": "123",
"trailer_number": "123",
"trailer_region": "123",
}
]
Но я бы хотел преобразовать ответ к такому виду
"data": [
"driver": {
"driver_last_name": "123",
"driver_first_name": "123",
"driver_middle_name": "123",
"driver_phone": "+7 (123) 546-45-54",
"driver_passport_serial": "123",
"driver_passport_num": "123",
"driver_passport_issued_by": "тест",
"driver_passport_issued_date": "2021-11-05",
},
"transport" : {
"tractor_mark": "123",
"tractor_model": "123",
"tractor_number": "123",
"tractor_region": "123",
"trailer_mark": "123",
"trailer_model": "123",
"trailer_number": "123",
"trailer_region": "123",
}
]
Может быть существует некий метод для такого, или может необходимо поменять запрос к бд,буду рад любым предположениям и ответам