@PavelSachenko

Как правильно обновить данные в методе update() — Laravel?

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>
  • Вопрос задан
  • 667 просмотров
Решения вопроса 1
@MSAFT
Проверь модель User, должно быть что-то вроде этого:
protected $fillable = [
        'name', 'email', 'password', 'role_id'
    ];
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы