如何将多个角色添加到一个单元格中的用户角色(LARAVEL 8x)

如何将多个角色添加到一个单元格中的用户角色(LARAVEL 8x),laravel,laravel-8,Laravel,Laravel 8,嗨,我不善于跟我解释,请: 我得到了用户角色和用户角色。我目前有一个多选框来为用户分配一个角色,但是用户角色只从选择框中保存一个角色id 我的问题是: 如何在用户角色的一个单元格中保存多个角色\u id? 如何检查用户在数据库中是否具有重复角色? - 我的UserRoleControllerStore public function store(UserRoleStoreRequest $request) { $validated = $request->validated();

嗨,我不善于跟我解释,请:

我得到了用户角色和用户角色。我目前有一个多选框来为用户分配一个角色,但是用户角色只从选择框中保存一个角色id

我的问题是:

如何在用户角色的一个单元格中保存多个角色\u id? 如何检查用户在数据库中是否具有重复角色? -

我的UserRoleControllerStore

public function store(UserRoleStoreRequest $request)
{
    $validated = $request->validated();

    $roles_ar = $validated['role_id'];
    $roles="";
    foreach($roles_ar as $key => $role){
        if (isset($role)){
        $roles.= $key . $role . ',';
        };}
        // dd($roles);
    $user = User::find($validated['user_id']);
    $user->roles()->attach([$roles]);
    return redirect('/user-role');
}
connect.blade.php多选输入框

 <select class="form-control" name="user_id">
    <option value="" selected="selected"></option>
        @if($users)
        @foreach($users as $user)
        <option value="{{ $user['id'] }}" ><h3>{{ $user['name'] }}</h3></option>
        @endforeach
        @endif
</select>

<label class="description">Role</label>
  <div class="form-group">
<label for="exampleFormControlSelect2">Use CTRL to multiselect</label>
<select multiple class="form-control" id="exampleFormControlSelect2" name="role_id[]">
    @if($roles)
    @foreach($roles as $role)
    <option value="{{ $role['id'] }}" ><h3>{{ $role['name'] }}</h3></option>
    @endforeach
    @endif
</select>

要将多个角色附加到用户,可以调用attach方法并提供ID数组作为参数。由于变量$roles\u ar中的输入已经有一个ID数组,因此可以像这样调用attach

$user->roles()->attach($roles_ar);
您还询问了如何检查数据库中角色的重复。但是,如果删除数据库中的所有现有角色,然后附加所有新角色,则不必检查重复的角色。所以在调用上面的attach方法之前,应该先调用detach方法

$user->roles()->detach();
感谢@brombeer,您可以使用sync而不是调用detach然后attach


attach接受一个ID数组,因此您可以->attach$roles\u ar;您可以调用$user->roles->detach;首先删除所有角色。我不知道你的第一个命令是什么意思。你能再解释一下吗?我对文字没有那么专业。好的,我在回答部分解释过。用透视表来表达谢谢!这很有帮助。可能需要使用而不是detach/attachoh nice,因为它可以正常工作。谢谢你,伙计。
$user->roles()->sync($roles_ar);