这段代码应该是从数据库中删除所有旧数据以及添加新数据时(使用sync())
现在我有一个用户项目,用户可以通过复选框链接到项目。
因此,选中复选框时,此功能会触发,但例如当我说user 1
和user 2
正在通过此功能添加到pivot table
时,它只会发送{ {1}},而user 2
将无法通过,出现了什么问题?
当我添加3个用户user 1
,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
(选择至少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 / 2
和user_id
应该是值。
答案 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:
sync
或者,如果您愿意,可以在$project->users()->sync([1,3,2]);
时使用attach
,contribute==1
时使用detach
或者,如果contribute==0
在取消选择用户时没有返回输入,并且仅在选择用户时返回,则可以尝试:
contribute
我只是注意到你有另一个bug,除非你用一个电话更新很多项目,你应该在你的功能的第一行放下一行。
$this->project->users()->sync(array_keys($request->get('contribute'));