Я создал то, что кажется неуклюжим решением для реструктуризации массива данных, чтобы передать его функции syn c () для обновления отношения «многие ко многим» с дополнительными данными в сводной таблице, и подумал, может ли кто-нибудь мог бы предложить более простой подход.
У меня есть массив, полученный из запроса, вот соответствующий отрывок:
"papers" => [
0 => [
"id" => 2
"code" => "123-321-888"
"name" => "Pop out"
"pivot" => [
"job_id" => 46
"paper_id" => 2
"qty_required" => 500
]
]
1 => [
"id" => 1
"code" => "444-666-999"
"name" => "Premium pro"
"pivot" => [
"job_id" => 46
"paper_id" => 1
"qty_required" => 1000
]
]
]
Чтобы выполнить простую синхронизацию c -многие отношения с дополнительными сводными данными необходимо реструктурировать так:
[
paper[id] => [
'qty_required' => paper[pivot][qty_required]
]
]
Что для приведенного выше примера будет:
[
2 => [
"qty_required" => "500"
]
1 => [
"qty_required" => "1000"
]
]
Сейчас я выполняю двухэтапный процесс для этого нужно:
$paperUpdate = Arr::pluck($request->input('papers'), 'pivot.qty_required', 'id');
//output: [ 2 => 500, 1 => 1000]
foreach ($paperUpdate as $key => $value) {
$paperSync[$key]['qty_required'] = $value;
}
//output: [ 2 => [ "qty_required" => "500" ], 1 => [ "qty_required" => "1000" ]
$job->papers()->sync($paperSync);
Есть ли более простой подход?