Как исправить ошибку «Неправильно сформировано ограничение внешнего ключа», когда «php artisan migrate»? - PullRequest
1 голос
/ 11 апреля 2019

Я пытаюсь запустить php artisan migrate для создания моих таблиц mysql с использованием laravel.

Я получил эту ошибку: неправильно сформировано ограничение внешнего ключа

Таблица пользователей:

Schema::create('users', function (Blueprint $table) {
      $table->increments('id');
      $table->string('name');
      $table->string('email', 150)->unique();
      $table->timestamp('email_verified_at')->nullable();
      $table->string('password');
      $table->rememberToken();
      $table->timestamps();
 });

Таблица альбомов:

Schema::create('albums', function (Blueprint $table) {
       $table->increments('id');
       $table->integer('user_id')->unsigned();
       $table->string('title');
       $table->text('description');
       $table->boolean('public');
       $table->foreign('user_id')->references('id')->on('users')-> 
       onDelete('SET NULL');
       $table->timestamps();
   });

Таблица изображений:

Schema::create('images', function (Blueprint $table) {
       $table->increments('image_id');
       $table->integer('user_id')->unsigned();;
       $table->string('image');
       $table->integer('album_id')->unsigned();;
       $table->string('title');
       $table->string('description');
       $table->foreign('user_id')->references('id')->on('users')- >onDelete('SET NULL');
       $table->foreign('album_id')->references('id')->on('albums')->onDelete('SET NULL');
       $table->timestamps();
   });

Но есть ошибка:

SQLSTATE[HY000]: General error: 1005 Can't create table `photo_storage`.`#sql-2d70_10a` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table `albums` add constraint `albums_user_id_foreign` foreign key (`user_id`) references `users` (`id`) on delete SET NULL)`

1 Ответ

1 голос
/ 11 апреля 2019

Поскольку у вас есть ->onDelete('SET NULL'), он ожидает, что поле user_id / album_id будет обнуляемым.Сделайте user_id и album_id из таблиц изображений и альбомов обнуляемыми вот так $this->integer('field')->nullable() и попробуйте снова

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...