Laravel версии 6.*
Вопрос состоит в том, почему имя пользователя обновляется, а роль - нет.
Есть метод update в ресурсном контроллере:
User::find($id)->update(['name' => $request->name,
'role_id' => $request->role]);
return redirect()->route('admin.user.index');
Таблица с юзером в виде миграции:
Schema::create('users', function (Blueprint $table) {
$table->integer('id')->autoIncrement();
$table->string('name', 100);
$table->string('email', 150)->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password', 100);
$table->string('phone', 100);
$table->integer('role_id')->default(1)->index();
$table->rememberToken();
$table->timestamps();
$table->foreign('role_id')->references('id')->on('roles')->onDelete('restrict');
});
Связь в модели User с таблицей Roles
public function roles(){
return $this->belongsTo(Role::class, 'role_id', 'id');
}
И наконец view:
<form action="{{route('admin.user.update', $user->id)}}" method="POST" class="col-md-12 mt-2" >
@csrf
@method('PUT')
<div class="row">
<div class="col-md-12 mb-3">
<div class="row">
<div class="col-md-6">
<input type="text" name="name" placeholder="Имя" value="{{$user->name}}" class="form-control">
</div>
<div class="col-md-6">
<select selected="{{$user->name}}" name="role" class="form-control">
@foreach($roles as $role)
<option
@if($user->role_id == $role->id)
selected
@endif
value="{{$role->id}}">{{$role->name}}
</option>
@endforeach
</select>
</div>
</div>
</div>
<div class="col-md-2 offset-10 d-flex justify-content-end">
<button type="submit" class="btn btn-primary">Изменить</button>
</div>
</div>
</form>