拉拉维尔刀片多选.如何在数据透视表中选择记录


Laravel blade multiple select. How to select records in the pivot table?

我正在使用Laravel,我有一个项目表和一个用户表。每个项目可以有多个用户。我已经设置了一个project_user数据透视表。

我正在尝试创建一个多选框,其中列出了所有用户,并选中了当前分配给该项目的用户。这是我创建视图的项目控制器函数。

public function edit($id)
{
    $project = Project::findOrFail($id);
    $users = User::lists('name','id');
    return View::make('projects.edit', compact('project','users'));
}

以下是相关的刀片形式:

{{ Form::select('user_id[]', $users, ??? , array('multiple')) }}

我认为???应该是与项目相关的一系列user_ids。我可以从中得到它吗

$project->user...something here?

或者,我需要在函数 edit() 中创建数组吗?

你快到了。首先确保在项目模型中定义了正确的关系

public function users(){
    return $this->belongsToMany('User');
}

现在要获取所有已分配用户的 ID,请执行以下操作:

$assignedUserIds = $project->users()->lists('id');

只需将其传递给视图...

接受的答案是正确的,除了在 Laravel 5.2 上我不得不做 ->toArray()

$assignedUserIds = $project->users()->lists('id')->toArray(); 

以使其与表单::选择一起使用。

我会评论原始答案,但我没有足够的声誉。

$assignedUserIds = $project->users()->lists('id');
to
// I used in laravel 5.7
$assignedUserIds = $project->users()->pluck('id');