执行约束迁移时,我遇到了这个奇怪的错误 当我执行此迁移时,我得到了
[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1005 Can't create table 'flowtime_dev.#sql-85bb_52' (errno: 121) (SQL: alter table `questions` add constraint questions_inventory_i
d_foreign foreign key (`inventory_id`) references `inventories` (`id`) on delete cascade)
[PDOException]
SQLSTATE[HY000]: General error: 1005 Can't create table 'flowtime_dev.#sql-85bb_52' (errno: 121)
我已经读过不同表中的数据类型应该匹配(比如int(10)到int(10))并且它们确实如此,这也是我最后一次迁移(所有表都存在并具有之前由其他迁移创建。)
我真的不知道该怎么做了:(。有人可以帮忙吗? 我见过类似的帖子,但到目前为止他们还没有解决这个问题。
迁移如下:
public function up()
{
Schema::table('questions', function ($table) {
$table->integer('inventory_id')->unsigned()->change();
$table->foreign('inventory_id')
->references('id')->on('inventories')
->onDelete('cascade');
});
Schema::table('question_response', function ($table) {
$table->integer('question_id')->unsigned()->change();
$table->foreign('question_id')
->references('id')->on('questions')
->onDelete('cascade');
});
Schema::table('question_response', function ($table) {
$table->integer('sample_result_set_id')->unsigned()->change();
$table->foreign('sample_result_set_id')
->references('id')->on('sample_response_set')
->onDelete('cascade');
});
Schema::table('inventory_response', function ($table) {
$table->integer('inventory_id')->unsigned()->change();
$table->foreign('inventory_id')
->references('id')->on('inventories')
->onDelete('cascade');
});
Schema::table('inventory_response', function ($table) {
$table->integer('sample_result_set_id')->unsigned()->change();
$table->foreign('sample_result_set_id')
->references('id')->on('sample_response_set')
->onDelete('cascade');
});
}
答案 0 :(得分:1)
在迁移开始时关闭外键约束。
SET FOREIGN_KEY_CHECKS=0;
然后,在迁移数据时,将其重新打开。
SET FOREIGN_KEY_CHECKS=1;
如果这不起作用,请尝试添加以下行。
$table->engine = 'InnoDB'
Further, you can rename the constraint since the name may already be used...
$table->foreign('inventory_id', 'fk_questions_inventory_id')->...
答案 1 :(得分:1)
尝试使用两次单独的迁移。
创建第一个迁移,它将创建表和所有列(在此处放置除$table->foreign
子句之外的所有内容)。运行migrate
命令。如果您已经进行了此迁移,请不要执行第二个,暂时将其从迁移目录中删除。
然后创建第二次迁移,它会将外键添加到已创建的列(此处仅使用$table->foreign
子句)。再次运行migrate
命令。
当我处于相同的情况时,这对我有所帮助。我希望它也适合你。