Laravel:即使使用“dropForeign”方法也不能删除外键
Posted
技术标签:
【中文标题】Laravel:即使使用“dropForeign”方法也不能删除外键【英文标题】:Laravel:Can't drop foreign key even using 'dropForeign' method 【发布时间】:2017-10-31 10:23:57 【问题描述】:我即将刷新我的迁移。但是php artisan migrate:refresh
命令不起作用。
它显示以下错误:
[Illuminate\Database\QueryException] SQLSTATE[42000]:语法错误 或访问冲突:1091 Can't DROP 'classes_userid_foreign';查看 该列/键存在(SQL:alter table
classes
drop foreign keyclasses_userid_foreign
)[PDOException] SQLSTATE[42000]:语法错误或访问冲突: 1091 不能 DROP 'classes_userid_foreign';检查该列/键 存在
我什至使用了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');
如何解决这个问题?
【问题讨论】:
你检查表并验证外键是否存在? 【参考方案1】:大多数情况下,当您在 laravel 中运行迁移(无论是向上还是向下),并且沿线发生错误时,事务可能已部分完成而未在迁移表中注册。
如果是这种情况,或者您想删除表是否确实存在外键,那么您应该考虑禁用外键检查,如下所示:
public function down()
Schema::disableForeignKeyConstraints();
Schema::drop('classes');
Schema::enableForeignKeyConstraints();
【讨论】:
以上是关于Laravel:即使使用“dropForeign”方法也不能删除外键的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 laravel 集合返回 500 错误,即使不是在我使用 dd() 检查结果时?
Laravel 5.2 会话闪存即使使用 Web 中间件也无法正常工作