关于php:Laravel-多对多关系中的sync()方法未更新模型

Laravel - sync() method in Many-to-many relationship not updating model

我的视图有一个多重选择框,可用于为用户分配某些资产。从表users中拉出用户,从表assets中拉出资产。

1
2
3
   <label for="assets" class="col-sm-5 control-label">Assets </label>
     
         {{Form::select('assets[]',$user->assets, $user->takenAssets, ['id'=>'assets','multiple','class'=>'select2 form-control'])}}

在上面的选择框中,$user->assets列出了从模型Asset::all('name','id')获取的数组,获取的资产只是$user->assets->pluck('id')->toArray();。完成这些操作以填充框,然后列出选定的框。

此多重选择框下方有五个文本字段,允许用户输入可选的序列号,每个文本框均作为名为serialnumber[]

的名称字段

现在,一旦控制器接收到请求,就会运行以下代码:

1
2
3
4
5
6
7
8
if(!collect($request->assets)->isEmpty())
{
   for($i = 0; $i<count($request->assets);$i++)
   {
      $user->assets()->sync([$i+1 => array('serialnumber'=>$request->serialnumber[$i])]);
   }

}

for循环中发生的$i+1是因为assets表中的id以1开头的方式。
它不是在更新asset_user表。怎么了


sync方法将要同步的ID数组作为参数,并将分离所有其他ID。这意味着如果您一个一个地同步ID,则第二个同步时将分离第一个ID,第二个将同步第三个...

如果$ request-> assets是一个ID数组,为什么不简单地执行:

1
2
3
if($request->has('assets')) {
    $user->assets()->sync($request->assets);
}