我創建了一個感覺像是笨重的解決方案來重組數據數組,以便將其傳遞給sync()以更新與數據透視表中的附加數據的多對多關系,并想知道是否有人可以建議一種更簡單的方法。我有一個來自請求的數組,這是相關的摘錄:"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 ] ] ]為了輕松同步多對多關系與額外的數據透視數據,需要將其重組為:[ 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);有更簡單的方法嗎?
1 回答

神不在的星期二
TA貢獻1963條經驗 獲得超6個贊
你的方法對我來說似乎很好。如果你想挑剔,你可以使用以下方法少做一次迭代:
$sync = array_reduce($request->input('papers'), function ($sync, $paper) {
$id = $paper['id'];
$sync[$id] = [ 'qty_required' => $paper['pivot']['qty_required'] ];
return $sync;
}, []);
- 1 回答
- 0 關注
- 136 瀏覽
添加回答
舉報
0/150
提交
取消