неправильно сформировано ограничение внешнего ключа 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 ()"..