2017-11-25 229 views
0

我为我的用户制作了一个编辑页面,除了更改角色外,其他所有内容都可以使用。我做了一个选择菜单,通过foreach循环显示所有角色。并且它显示用户的当前角色,如下所示:Laravel - 按角色名称编辑角色用户

<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和角色表,它拥有所有的角色。所以关系是:用户有角色,角色有很多用户。这些关系在模型中设置。所以{{ $user->role->role_name }}工作得很好。

在此先感谢!

回答

1

假设角色名称是唯一的。在您的文章的方法,你可以做以下各项

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); 
} 

希望它能帮助:)

+0

感谢那些工作!你是否也当我更改密码,如:$ user-> password = $ request-> password;'如何再次散列它?所以,如果我改变他的密码密码又被哈希了? –

+0

我编辑了我的答案,现在看。在这之后,您不必担心控制器上的散列保存或更新新用户。 – Sohel0415

+0

它现在有效!谢谢! –