Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel同步方法仅发送第二个数据_Php_Laravel - Fatal编程技术网

Php Laravel同步方法仅发送第二个数据

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)

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

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

因此,选中复选框后,此函数将触发,但例如,当我说
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);