这段代码应该是从数据库中删除所有旧数据以及添加新数据时(使用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);