Laravel - 通过 role_name 编辑角色用户

Laravel - Edit role user by role_name

我为我的用户制作了一个编辑页面,除了更改角色外,一切正常。我制作了一个 select 菜单,它通过 foreach 循环显示所有角色。它会像这样显示用户的当前角色:

<div class="form-group row">
   <div class="col-md-4">
      <label for="Datum">Rol:</label>
   </div>
   <div class="col-md-8">
     <select class="form-control" id="Datum" name="role">
       <option selected>{{ $user->role->role_name }}</option>
       @foreach($roles as $role)
       <option>{{ $role->role_name }}</option>
       @endforeach
     </select>
   </div>
  </div>

我希望能够通过 role_name 而不是 ID 来更改角色。老实说,我不知道去哪里看。我怎样才能做到这一点?

表单通过的控制器如下所示:

public function updateUser(Request $request, $id)
{

    $user = User::find($id);
    $user->update($request->all());
    $user->save();

    return back()->with('flash', 'Account is geupdate');
}

在数据库中,一个用户有一个role_id,在角色table中,它拥有所有的角色。所以关系是:用户有角色,角色有很多用户。这些关系在模型中设置。所以 {{ $user->role->role_name }} 工作正常。

提前致谢!

假设 role_name 是唯一的。在您的 post 方法中,您可以执行以下操作-

public function updateUser(Request $request, $id)
{
        $role = Role::where('role_name','=',$request->input('role_name'))->first();
        $user = User::find($id);
        $user->role_id = $role->id;
        $user->save();

       return back()->with('flash', 'Account is geupdate');
}

根据您的评论,将此添加到您的用户模型中-

 public function setPasswordAttribute($password)
{   
    $this->attributes['password'] = bcrypt($password);
}

希望对您有所帮助:)