неправильно сформировано ограничение внешнего ключа laravel errno 150

может кто-нибудь помочь мне решить эту проблему?

есть 3 таблицы с 2 внешними ключами:

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

        Schema::create('firms', function (Blueprint $table) {
                    $table->increments('id');
                    $table->string('title')->nullable();  
                    $table->integer('user_id')->unsigned()->nullable();
                    $table->foreign('user_id')->references('id')->on('users');
                    $table->timestamps();
                });
       Schema::create('jobs', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title')->nullable();
            $table->integer('firm_id')->unsigned()->nullable();
            $table->foreign('firm_id')->references('id')->on('firms');
            $table->timestamps();
        });

ошибка после запуска миграции:

[IlluminateDatabaseQueryException]
  SQLSTATE[HY000]: General error: 1005 Can't create table `job`.`#sql-5fc_a1`
   (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter ta
  ble `firms` add constraint `firms_user_id_foreign` foreign key (`user_id`)
  references `users` (`id`))

  [PDOException]
  SQLSTATE[HY000]: General error: 1005 Can't create table `job`.`#sql-5fc_a1`
   (errno: 150 "Foreign key constraint is incorrectly formed")

2 ответов


в случае внешних ключей поля ссылки и ссылки должны иметь точно такой же тип данных.

создания id поля в users и firms as подпись целых чисел. Однако вы создаете оба внешних ключа как без подписи целые числа, поэтому создание ключей не удается.

вам нужно либо добавить unsigned предложение id определения полей, или удалить unsigned предложение из внешнего ключа поля.


  • пользователи
  • кассир ссылается на пользователей
  • студент ссылается кассир

кроме того, при объявлении внешних ключей в laravel все таблицы, на которые вы ссылаетесь, должны быть сверху. В этом случае вы можете использовать модификатор "->unsigned ()"..