我即将刷新我的迁移。但是php artisan migrate:refresh
命令不起作用。
它显示以下错误:
[Illuminate \ Database \ QueryException] SQLSTATE [42000]:语法错误 或访问冲突:1091 DROP' classes_userid_foreign&#39 ;;校验 该列/密钥存在(SQL:alter table
classes
删除外键classes_userid_foreign
)[PDOException] SQLSTATE [42000]:语法错误或访问冲突: 1091 DROP' classes_userid_foreign&#39 ;;检查列/键
存在
我甚至使用dropForeign
,但它不适合我。
我正在显示我的migration
文件
public function up()
{
Schema::create('classes', function (Blueprint $table) {
$table->increments('id');
$table->integer('userId')->unsigned();
$table->string('title');
$table->string('name');
$table->string('code')->unique();
$table->integer('capacity')->unsigned();
$table->integer('tagId')->unsigned();
$table->foreign('userId')->references('id')->on('users');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('classes', function (Blueprint $table) {
$table->dropForeign(['userId']);
});
Schema::drop('classes');
}
如何解决这个问题?
答案 0 :(得分:0)
大多数情况下,当您在laravel中运行迁移(无论是向上还是向下),并且沿着该行发生错误时,事务可能已部分完成而未在迁移表中注册。
如果是这种情况,或者您想删除表是否确实存在外键,那么您应该考虑禁用外键检查,如下所示:
public function down()
{
Schema::disableForeignKeyConstraints();
Schema::drop('classes');
Schema::enableForeignKeyConstraints();
}