Php Laravel同步方法仅发送第二个数据
这段代码应该从数据库中删除所有旧数据,并在添加新数据时(使用sync()) 现在我有了一个有用户的项目,用户可以通过复选框链接到项目 因此,选中复选框后,此函数将触发,但例如,当我说Php Laravel同步方法仅发送第二个数据,php,laravel,Php,Laravel,这段代码应该从数据库中删除所有旧数据,并在添加新数据时(使用sync()) 现在我有了一个有用户的项目,用户可以通过复选框链接到项目 因此,选中复选框后,此函数将触发,但例如,当我说user 1和user 2正在执行此功能以添加到透视表中时,它将只发送user 2,而user 1将无法通过,发生了什么问题 当我添加3个用户时,user1,user2,user3,只会添加user2 控制器 public function update(CreateProjectRequest $request)
user 1
和user 2
正在执行此功能以添加到透视表中时,它将只发送user 2
,而user 1
将无法通过,发生了什么问题
当我添加3个用户时,user1
,user2
,user3
,只会添加user2
控制器
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');
}
刀片
所以1/3/2
将是用户id
,=>1
应该是值。问题是sync
在循环中被调用3次,所以每次它都同步一个值。您必须在sync
ex中传递一个ID数组:
$project->users()->sync([1,3,2]);
或者,如果需要,您可以在贡献==1
时使用附加
和分离
当贡献==0
或者,如果取消选择用户时,contribute
不返回输入,并且仅在选择用户时返回,则您可以尝试:
$this->project->users()->sync(array_keys($request->get('contribute'));
我刚刚注意到您还有另一个bug,除非您通过一个调用更新许多项目,否则您应该将下面的一行放在函数的第一行
$project = $this->project->find($request->project_id);
到目前为止你调试过了吗?是的,如果我放一个dd($request->input());在我的更新方法开始时,它将返回:,这应该是正确的
$this->project->users()->sync(array_keys($request->get('contribute'));
$project = $this->project->find($request->project_id);