Laravel - 使用复选框将数据发送到数据透视表 table
Laravel - Sending data to pivot table using a checkbox
我有 3 个 table:projects
- users
- project_user
.
这是一个 ManyOnMany
关系,所以这就是为什么我有一个支点 table。
我使用 belongsToMany
.
通过我的模型 link 得到了它们
我的问题来了。
我有一个 table 这样的:
所以我选择了 project
,table 和 users
以及 active/contribute
复选框。
选中 active/contribute
复选框后,用户将 link 加入项目。
所以在我的脑海里有这样的东西:
勾选checkbox
时,需要将user_id
包括$this->project_id
发送到pivottableproject_user
所以它将 link 项目 <->user.
但现在的问题是我不知道如何将它变成工作代码。
HTML/Blade:
@foreach($users as $user)
<tr>
<td>
{{$user->firstname}} {{$user->middlename}} {{$user->lastname}}
</td>
<td>
<input name='contribute' type='hidden' value='0'>
{!! Form::checkbox('', '1', false) !!}
</td>
</tr>
@endforeach
型号:
用户
public function projects()
{
return $this->belongsToMany('App\Project', 'project_user', 'user_id', 'project_id');
}
项目
public function users()
{
return $this->belongsToMany('App\User', 'project_user', 'project_id', 'user_id');
}
控制器:
public function edit($id, Project $project)
{
$users = User::all();
$project = $this->project->find($id);
return view('project.edit', ['project' => $project, 'id' => 'edit'], compact('users'));
}
public function update(CreateProjectRequest $request, $project)
{
$project = $this->project->find($project);
$project->fill($request->input())->save();
return redirect('project');
}
告诉我是否需要提供任何其他代码
您可以创建如下所示的输入数组,但您必须检查该用户是否已与该项目相关联。
{!! Form::checkbox('contribute['.$user->id.']', '1', $checkifinproject) !!}
然后在控制器中更新时使用 sync
。
但在此之前,因为您只想要复选框中值为 1 的 ids
,所以您必须过滤掉零值,然后只保留数组 $request->input('users')
.
的键
$project = $this->project->find($project);
$project->sync($prepared_ids);
Sync 将从 table 中删除与此项目关联的所有先前 user_ids,并保存新的。
我有 3 个 table:projects
- users
- project_user
.
这是一个 ManyOnMany
关系,所以这就是为什么我有一个支点 table。
我使用 belongsToMany
.
我的问题来了。
我有一个 table 这样的:
所以我选择了 project
,table 和 users
以及 active/contribute
复选框。
选中 active/contribute
复选框后,用户将 link 加入项目。
所以在我的脑海里有这样的东西:
勾选checkbox
时,需要将user_id
包括$this->project_id
发送到pivottableproject_user
所以它将 link 项目 <->user.
但现在的问题是我不知道如何将它变成工作代码。
HTML/Blade:
@foreach($users as $user)
<tr>
<td>
{{$user->firstname}} {{$user->middlename}} {{$user->lastname}}
</td>
<td>
<input name='contribute' type='hidden' value='0'>
{!! Form::checkbox('', '1', false) !!}
</td>
</tr>
@endforeach
型号:
用户
public function projects()
{
return $this->belongsToMany('App\Project', 'project_user', 'user_id', 'project_id');
}
项目
public function users()
{
return $this->belongsToMany('App\User', 'project_user', 'project_id', 'user_id');
}
控制器:
public function edit($id, Project $project)
{
$users = User::all();
$project = $this->project->find($id);
return view('project.edit', ['project' => $project, 'id' => 'edit'], compact('users'));
}
public function update(CreateProjectRequest $request, $project)
{
$project = $this->project->find($project);
$project->fill($request->input())->save();
return redirect('project');
}
告诉我是否需要提供任何其他代码
您可以创建如下所示的输入数组,但您必须检查该用户是否已与该项目相关联。
{!! Form::checkbox('contribute['.$user->id.']', '1', $checkifinproject) !!}
然后在控制器中更新时使用 sync
。
但在此之前,因为您只想要复选框中值为 1 的 ids
,所以您必须过滤掉零值,然后只保留数组 $request->input('users')
.
$project = $this->project->find($project);
$project->sync($prepared_ids);
Sync 将从 table 中删除与此项目关联的所有先前 user_ids,并保存新的。