Laravel - 使用复选框将数据发送到数据透视表

时间:2015-05-20 11:22:22

标签: php html database laravel checkbox

我有3张桌子:projects - users - project_user

这是一个ManyOnMany关系,这就是为什么我有一个数据透视表。

我使用belongsToMany通过我的模型将它们链接起来。

现在出现了我的问题。

我有一个这样的表:enter image description here

所以我选择了project,并使用usersactive/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');
}

告诉我是否需要提供任何其他代码

1 个答案:

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