Версия: Laravel 9
Это выглядит следующим образом:
[*]У меня есть таблица «Пользователи», «Подмножества» и «Описательная». [*]Мне уже удалось убедить пользователя зарегистрировать подмножество. Однако теперь я хочу, чтобы при регистрации подмножества оно автоматически перенаправлялось на страницу регистрации «Описание», имеющую два поля. [*]Но я не могу заставить внешний ключ описательной таблицы («idSub») принимать «id» таблицы «Подмножества», как я делал ранее между пользователем и подмножеством.
Я пришлю вам свой код:
** Моя функция хранения SubconjuntosController **
публичное хранилище функций (запрос $request) { $user = Auth::user(); if ($user && Auth::check()) { $sub = новые подмножества(); $sub->title = $request->title; $sub->content = $request->content; $sub->status = $request->status == 'включено'? 0:1; $sub->user_id = Auth::user()->id; // подмножество внешнего ключа получает идентификатор пользователя. } $sub->сохранить(); return redirect()->route('descriptive.create'); //Здесь вы попадете в форму для создания описания. } ** Моя функция хранения DescriptivoController **
публичное хранилище функций (запрос $request, описательный $descriptive) { $user = Auth::user(); if ($user && Auth::check()) { $descriptive = новый Descriptive(); $descriptive->теоретик = $request->теоретик, $description->ссылка = $request->ссылка, // Я хотел бы знать, как получить внешний ключ из описания, чтобы он был равен идентификатору подмножества. Точно так же, как я сделал с пользователем и подмножеством. } $description->сохранить(); return redirect()->route('sub.index'); } ** Описание Модель **
класс Описательный расширяет модель { используйте HasFactory; защищенный $fillable = [ 'idSub', 'теоретик', 'ссылка', ]; подмножества общедоступных функций() { вернуть $this->belongsTo(Subsets::class); } } ** Подмножество модели **
класс Subsets расширяет модель { используйте HasFactory; защищенный $fillable = [ 'ID пользователя', 'заголовок', 'содержание', 'положение дел', ]; защищенные $casts = [ 'статус' => 'логическое значение' ]; публичная функция пользователя() { вернуть $this->belongsTo(User::class); } описание публичной функции() { вернуть $this->hasOne(Description::class, 'idSub'); }
** Миграция описания, моя таблица**
вернуть новый класс расширяет миграцию { /** * Запустите миграцию. * * @return void */ публичная функция вверх() { Schema::create('descriptions', function (Blueprint $table) { $таблица->id(); $table->foreignId('idSub')->constrained('subsets')->onDelete('cascade'); $table->text('теоретик')->nullable(); $table->text('reference')->nullable(); $таблица->временные метки(); }); } /** * Отмените миграцию. * * @return void */ публичная функция вниз() { Схема::dropIfExists('описания'); } }; ** В моем коде появляется эта ошибка **
SQLSTATE[HY000]: Общая ошибка: 1364 Поле «idSub» не имеет значения по умолчанию. INSERT INTO `descriptives` (`theorist`, `reference`, `updated_at`, `create_at`) ЗНАЧЕНИЯ (?, ?, 01.11.2023 12:18:10, 01.11.2023 12:18:10) Повторяю: Я хочу, чтобы внешний ключ «idSub» из описательной таблицы взял «id» из таблицы «Подмножества». Чтобы я мог сохранить информацию.
***Моя система работает следующим образом:
[*]Пользователь регистрирует Подмножество, при нажатии кнопки «Сохранить» оно перенаправляется в форму «Описание».
Надеюсь, кто-нибудь сможет мне помочь. Потому что я знаю, что это кажется глупой ошибкой, но я застрял в этой части на день и не могу ее решить. Буду очень благодарен!
Я видел это в документации, где это показано именно так
$comment = new Comment(['message' => 'Новый комментарий.']); $post = Сообщение::найти(1); $comment = $post->comments()->save($comment); Но я не понимал, как применить это к своему коду. Я хочу, чтобы внешний ключ «idSub» из описательной таблицы взял «id» из таблицы «Подмножества». Чтобы я мог сохранить информацию.
Мобильная версия