1048 Столбец user_id не может быть нулевым при попытке назначить роль существующему пользователю Laravel

Я хочу назначить роль существующему пользователю, но получаю эту ошибку.

Мой пользовательский контроллер:

 public function show(User $user) {
    return view('admin.users.profile', [
        'user' => $user,
        'roles' => Role::all(), 
    ]);

  public function attach(User $user) {
  $user->roles()->attach(request('role'));
  return back();
  }

Моя форма:

<form method = "post" action = "{{route('user.role.attach', $user)}}">
                    @csrf
                    @method('PUT')
                    <input type = "hidden" name = "role" value = "{{$role->id}}">
                    <button class = "btn btn-primary">Attach</button>
                </form>

Я получаю эту ошибку в браузере:

insert into `role_user` (`role_id`, `user_id`) values (2, ?)

Итак, я полагаю, что я не возвращаю user_id, а только role_id, нажав кнопку для прикрепления.

Похоже, что привязка модели маршрута создает некоторые проблемы :) Можете ли вы поделиться своим файлом маршрута?

knubbe 05.05.2022 11:43

Да, конечно!

dzonkile 05.05.2022 11:54
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не привязали user к своему маршруту. Это должно быть что-то вроде:

Route::put('/users/{user}/attach', [App\Http\Controllers\UserController::class, 
'attach'])->name('user.role.attach');

Вы, конечно, можете немного изменить свой маршрут, но самое главное здесь то, что вы ожидаете пользователя в контроллере, но вы не привязываетесь к маршруту;)

Спасибо! Это помогло и решило проблему!

dzonkile 05.05.2022 12:04

Другие вопросы по теме