Laravel Sync方法仅发送第二个数据

时间:2015-05-20 15:15:29

标签: php laravel

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

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

因此,选中复选框时,此功能会触发,但例如当我说user 1user 2正在通过此功能添加到pivot table时,它只会发送{ {1}},而user 2将无法通过,出现了什么问题?

当我添加3个用户user 1user 1user 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 (选择至少3个用户),这将得到回报:

dd($request->input());

因此 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 / 2user_id应该是值。

1 个答案:

答案 0 :(得分:2)

问题是class A { void m(byte b){ System.out.println("byte"); } public static void main(String args[]){ A a1 = new A(); final int i = 10; a1.m(i); } } java:9: m(byte) in A cannot be applied to (int) sync中被调用3次,因此每次同步一个值。你必须在loop ex:

中传递一组id
sync

或者,如果您愿意,可以在$project->users()->sync([1,3,2]); 时使用attachcontribute==1时使用detach

或者,如果contribute==0在取消选择用户时没有返回输入,并且仅在选择用户时返回,则可以尝试:

contribute

我只是注意到你有另一个bug,除非你用一个电话更新很多项目,你应该在你的功能的第一行放下一行。

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