这段代码应该从数据库中删除所有旧数据,并在添加新数据时(使用sync())
现在,我有一个包含用户的项目,并且可以使用复选框将用户链接到项目。
于是就选中复选框此功能会触发,但例如当我说,user 1
和user 2
正在经历这个机能的研究获得加入pivot table
只会发送user 2
,并且user 1
不会得到通过,什么错误?
当我加3级的用户user 1
,user 2
,user 3
,只能user 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
应该是价值。
问题是,它sync
被调用了loop
3次,因此每次它都同步一个值。您必须在sync
ex中传递ID数组:
$project->users()->sync([1,3,2]);
或者,如果你愿意,你可以使用attach
时,contribute==1
和detach
当contribute==0
或者,如果contribute
在取消选择用户时不返回输入,而仅在选择用户时返回,则可以尝试:
$this->project->users()->sync(array_keys($request->get('contribute'));
我只是注意到您还有另一个错误,除非您通过一次调用更新许多项目,否则应将下面的行放在函数的第一行。
$project = $this->project->find($request->project_id);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句