Я попробовал почти все ответы здесь, мои миграции в порядке, я установил движок на «InnoDB», я установил user_types_id
без подписи. Я думаю, что что-то упустил, я не могу перенести это. (Я был в состоянии вручную добавить FK из phpMyAdmin, хотя).
мой user-types
созданы до того, как будет создана моя таблица пользователей, я гарантировал это 🙂
Миграции:
Schema::create('user-types',function(Blueprint $table){
$table->engine = 'InnoDB';
$table->increments('id');
$table->string('name');
$table->timestamps();
});
и таблица пользователей:
// I think I saw this somewhere, too
Schema::enableForeignKeyConstraints();
Schema::create('users',function(Blueprint $table){
$table->engine = 'InnoDB';
$table->increments('id');
$table->string('name');
$table->string('password');
$table->integer('user_types_id')->unsigned()->nullable();
$table->timestamps();
});
Schema::table('users',function(Blueprint $table){
// When I index it I am able to manually add fk from
// phpMyAdmin
$table->index('user_types_id');
$table->foreign('user_types_id')->references('id')->on('user_types');
});
В определении схемы есть различия в именах.
Вы создаете таблицу с Schema::create('user-types',function(....
где имя таблицы user-types
но когда вы настраиваете внешний ключ, вы передаете user_types
Так что сделайте их такими, какие бы они ни были правильными Или user-types
или же user_types
и тогда это будет работать.
Вы можете дать ссылку, как это также
Schema::create('users',function(Blueprint $table){
$table->engine = 'InnoDB';
$table->increments('id');
$table->foreign('user_types_id')->references('id')->on('user-types')->onDelete('cascade');
$table->string('name');
$table->string('password');
$table->integer('user_types_id')->nullable();
$table->timestamps();
});
Schema::enableForeignKeyConstraints(); //Remove this its not require,
Я думаю, тебе нужно написать,
Schema::disableForeignKeyConstraints(); // disable foreign key checks while creating tables which are dependant on each other
в верхней части определения схемы, где вы столкнулись с этой проблемой, она должна работать.