2017-08-17 60 views
2

我遇到问题。我将下拉列表添加到表单中,但他只显示列表。当我点击buttun“发送”时,我的数据库不会改变。 Form::text更改我的数据库,但Form::select不作任何更改。可能,我在控制器中有问题?Laravel 5. Dropdown不会更改数据库

控制器

public function edit($id) 
{ 
    $user = User::with('roles')->findOrFail($id); 
    $userRole = Role::pluck('name', 'id'); 
    return view('pages.edit', compact('user', 'userRole')); 
} 

public function update($id, Request $request) 
{ 
    $user = User::with('roles')->findOrFail($id); 
    $user->update($request->all()); 
    return redirect('users'); 
} 

查看

{!! Form::model($user, ['method' => 'PATCH', 'action'=>['[email protected]', $user->id]]) !!} 
<div class="form-group"> 
    <div class="form-group col-md-offset-3 col-md-6"> 
    {!! Form::label('roles','Roles: ') !!} 
    {!! Form::select('roles',$userRole, null,['class'=>'form-control']) !!} 
    </div> 

    <div class="form-group col-md-offset-3 col-md-6"> 
     {!! Form::submit('Send', ['class'=>'btn btn-success form-control']) !!} 
    </div> 
</div> 
{!! Form::close() !!} 

拥有角色

public function roles() 
    { 
     return $this->belongsToMany(Role::class); 
    } 

    public function assignRole($role) 
    { 
     return $this->roles()->save(
      Role::whereName($role)->firstOrFail() 
     ); 
    } 

THX的帮助。

+0

我提到角色是你模型上的关系吗?您将不得不使用单独的查询来创建此关系。请显示你的'User'和'Role'模型。 – Jerodev

+0

把'print_r($ request-> all()); exit();'放到你的'update()'中并让我知道输出。 –

+0

@Jerodev我更新后 – funfelfonfafis

回答

1

由于角色是一种关系,您需要将角色附加或关联到用户。取决于关系的类型。

您必须将ROLE_ID附加到您的用户模型,在你的控制器补充一点:

$user->roles()->attach($request->roles); 
$user->save(); 

正如在评论中指出,在您的下拉领域的关键是角色的ID的。

ps:这些是laravel雄辩的基础知识,所以我会建议先阅读文档。 https://laravel.com/docs/5.4/eloquent-relationships

+0

我以前试过,但得到的结果是:_No查询结果的模型[App \ Role] ._ – funfelfonfafis

+0

这意味着,无论角色名称你插入assingRole()在数据库中。你在做什么时得到: dd($ request-> all())在你的控制器内。 – Christophvh

+0

'数组:5 [▼ “_method”=> “补丁” “_token”=> “sbsSGt9lkR12WlG2MRuYKt627JE6Hy7ZX9IAGCjb” “名称”=> “bot2” “电子邮件”=>“bot2 @机器人。com“ ”roles“=>”1“ ]' – funfelfonfafis