为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel - 重组数组,以便轻松同步多对多与附加枢轴数据

Laravel - 重组数组,以便轻松同步多对多与附加枢轴数据

PHP
月关宝盒 2023-08-06 14:38:49
我创建了一个感觉像是笨重的解决方案来重组数据数组,以便将其传递给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;

}, []);


查看完整回答
反对 回复 2023-08-06
  • 1 回答
  • 0 关注
  • 113 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号