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,并保存新的。