php – Laravel Sync方法只发送第二个数据

这段代码应该是从数据库中删除所有旧数据以及添加新数据时(使用sync())

现在我有一个用户项目,用户可以通过复选框链接到项目.

因此,在复选框上选中此功能将触发,但是例如当我说用户1和用户2正在通过此功能添加到数据透视表时它将只发送用户2,而用户1将无法通过,这是什么出错了?

当我添加3个用户1,用户2,用户3时,只会添加用户2.

调节器

public function update(CreateProjectRequest $request)
{
    if($request->get('contribute'))
    {
        foreach($request->get('contribute') as $k => $contribute)
        {
            if($contribute == 1)
            {
                $project = $this->project->find($request->project_id);
                $project->users()->sync(array($k));

            }
        }
    }

    $project = $this->project->find($request->project_id);
    $project->fill($request->input())->save();

    return redirect('project');
}

@foreach($users as $user)
            <tr>
                <td>
                    {{$user->firstname}} {{$user->middlename}} {{$user->lastname}}
                </td>
                <td>
                    {!! Form::checkbox('contribute['.$user->id.']', '1', $user->projects->contains('id', $project->id)) !!}
                </td>
            </tr>
@endforeach

在dd($request-> input());在我的更新方法开始时(选择至少3个用户),这将得到回报:

  array:9 [▼
  "_method" => "PATCH"
  "_token" => "0uIZNn6zwZjVKfgE0ckhDULeYda0OaLzKVdUgoM8"
  "name" => "Dire Straits"
  "completion_date" => "2015-05-18"
  "DataTables_Table_0_length" => "10"
  "contribute" => array:3 [▼
    1 => "1"
    3 => "1"
    2 => "1"
  ]
  "completed" => "1"
  "active" => "0"
  "project_id" => "11"
]

所以1/3/2将是user_id和=> 1应该是值.

最佳答案 问题是同步在循环中被调用3次,所以每次同步一个值.你必须在同步ex中传递一组id:

$project->users()->sync([1,3,2]);

或者如果你想要,你可以在贡献== 1时使用附加,并在贡献== 0时分离

或者,如果在取消选择用户时,贡献不返回输入,并且仅在选择用户时返回,则可以尝试:

$this->project->users()->sync(array_keys($request->get('contribute'));

我只是注意到你有另一个bug,除非你通过一次调用更新许多项目,你应该将下面的行放在你函数的第一行.

$project = $this->project->find($request->project_id);
点赞