我有3张桌子:projects
- users
- project_user
。
这是一个ManyOnMany
关系,这就是为什么我有一个数据透视表。
我使用belongsToMany
通过我的模型将它们链接起来。
现在出现了我的问题。
我有一个这样的表:
所以我选择了project
,并使用users
和active/contribute
复选框创建了一个表格。
选中active/contribute
复选框后,用户将链接到项目。
所以在我的脑海中我有这样的事情:
选中checkbox
后,需要将包含user_id
的{{1}}发送到数据透视表$this->project_id
,以便链接项目< - >用户。
但现在问题是我不知道我将如何将其转化为正常工作的代码。
HTML /刀片:
project_user
型号:
用户
@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');
}
告诉我是否需要提供任何其他代码
答案 0 :(得分:1)
您可以创建如下所示的输入数组,但您必须检查此用户是否已与此项目关联。
{!! Form::checkbox('contribute['.$user->id.']', '1', $checkifinproject) !!}
然后在控制器中更新时使用sync
但在此之前,因为您只需要复选框中值为ids
的{{1}},您必须过滤掉零值,然后只保留数组$request->input('users')
的键。
$project = $this->project->find($project);
$project->sync($prepared_ids);
然后,Sync将从表中删除与该项目关联的所有先前user_id,并保存新的。