gpt4 book ai didi

php - Laravel Sync 方法只发送第二个数据

转载 作者:可可西里 更新时间:2023-10-31 23:30:09 30 4
gpt4 key购买 nike

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

现在我有一个包含用户的项目,可以使用复选框将用户链接到项目。

所以在选中复选框时会触发此功能,但是例如当我说 user 1user 2 正在通过此功能添加到 pivot table 它只会发送user 2,而user 1不会通过,这是怎么回事?

当我添加 3 个用户 user 1user 2user 3 时,只有 user 2 会得到补充。

Controller

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');
}

Blade

@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 应该是值。

最佳答案

问题是 syncloop 中被调用了 3 次,所以每次都同步一个值。您必须在 sync ex 中传递一个 id 数组:

$project->users()->sync([1,3,2]);

或者,如果您愿意,可以在contribute==1 时使用attach,在contribute==0 时使用detach >

或者,如果 contribute 在取消选择用户时不返回输入,而仅在选择时返回,那么您可以尝试:

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

我刚刚注意到您还有另一个错误,除非您通过一次调用更新许多项目,否则您应该将下面的行放在函数的第一行。

$project = $this->project->find($request->project_id);

关于php - Laravel Sync 方法只发送第二个数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30353788/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com