【问题标题】:Laravel - Edit role user by role_nameLaravel - 通过角色名称编辑角色用户
【发布时间】:2018-05-09 07:12:29
【问题描述】:

我为我的用户创建了一个编辑页面,除了更改角色外,一切正常。我制作了一个选择菜单,通过 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>

我希望能够通过角色名称而不是 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-&gt;role-&gt;role_name }} 工作得很好。

提前致谢!

【问题讨论】:

    标签: php laravel laravel-5 laravel-5.2


    【解决方案1】:

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

    希望对你有帮助:)

    【讨论】:

    • 感谢工作!当我更改密码时,您是否也这样:$user-&gt;password = $request-&gt;password; 如何再次对其进行哈希处理?这样如果我更改他的密码,密码就会再次被散列?
    • 我已经编辑了我的答案,现在看。在此之后,您无需担心控制器上的散列以保存或更新新用户。
    猜你喜欢
    • 2012-07-29
    • 2016-12-26
    • 1970-01-01
    • 2016-09-09
    • 2019-07-11
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多