Laravel - 使用复选框将数据发送到数据透视表
Posted
技术标签:
【中文标题】Laravel - 使用复选框将数据发送到数据透视表【英文标题】:Laravel - Sending data to pivot table using a checkbox 【发布时间】:2015-08-01 14:43:58 【问题描述】:我有 3 张桌子:projects
- users
- project_user
。
这是一个ManyOnMany
关系,所以我有一个数据透视表。
我使用belongsToMany
通过我的模型将它们链接起来。
现在我的问题来了。
我有一张这样的桌子:
所以我选择了一个project
,还有一个带有users
和active/contribute
复选框的表格。
当active/contribute
复选框被选中时,用户将被链接到项目。
所以在我的脑海中,我有这样的想法:
当checkbox
被选中时,它需要将user_id
包括$this->project_id
发送到数据透视表project_user
,这样它就会链接项目用户。
但现在的问题是我不知道如何将其用于工作代码。
HTML/刀片:
@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');
如果需要提供任何其他代码,请告诉我
【问题讨论】:
【参考方案1】:您可以创建如下所示的输入数组,但您必须检查此用户是否已与此项目关联。
!! Form::checkbox('contribute['.$user->id.']', '1', $checkifinproject) !!
然后在控制器中更新时使用sync
。
但在此之前,因为您只想要复选框中值为 1 的 ids
,所以您必须过滤掉零值,然后只保留数组 $request->input('users')
的键。
$project = $this->project->find($project);
$project->sync($prepared_ids);
然后,Sync 将从表中删除与该项目关联的所有以前的 user_id,并保存新的。
【讨论】:
if($request->get('contribute')) foreach($request->get('contribute') as $k => $contribute) if($contribute == 1) $project = $this->project->find($request->project_id); $project->users()->attach($k);
, <input name="contribute[$user->id]" type="checkbox" value="1"/>
,这是我现在拥有的,它会添加到表格中,但它会继续添加到表格中并且不会显示它已经添加了
是的,只要我继续点击“编辑”,它将被添加到数据库中,新规则将被添加,例如:(id = 1 , project_id = 5, user_id = 1
)、(id = 1 , project_id = 5, user_id = 2
) 等等
好的,那么唯一的事情就是你必须检查这个用户是否在这个项目中,如果为真,则将checked
属性添加到复选框
什么是可行/有效的方法?我被这个问题困扰了很长时间,我无法直接考虑它atm以上是关于Laravel - 使用复选框将数据发送到数据透视表的主要内容,如果未能解决你的问题,请参考以下文章