我正在尝试回滚我的数据库,但出现此错误:
[照亮\数据库\ QueryException] SQLSTATE [23000]:完整性约束违规:1217无法删除或更新父行:外键约束失败(SQL:drop table
tb_levels
)[PDOException] SQLSTATE [23000]:完整性约束违规:1217无法删除或更新父行:外键约束失败
这是我的迁移代码:
public function up()
{
Schema::disableForeignKeyConstraints();
Schema::create('tb_users', function (Blueprint $table) {
$table->engine = 'InnoDB';
$table->increments('id_user');
$table->string('name');
$table->string('username');
$table->string('email')->unique();
$table->integer('id_level')->unsigned();
$table->string('password', 60);
$table->rememberToken();
$table->boolean('activated')->default(false);
$table->timestamps();
$table->foreign('id_level')->references('id_level')->on('tb_levels');
});
Schema::enableForeignKeyConstraints();
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::disableForeignKeyConstraints();
Schema::table('tb_users', function(Blueprint $table){
$table->dropForeign('tb_users_id_level_foreign');
$table->dropColumn('id_level');
});
Schema::drop('tb_users');
Schema::enableForeignKeyConstraints();
}
我已经尝试了几种在这个论坛中找到的方法,但仍然有错误,请帮忙吗?
答案 0 :(得分:1)
首先使用以下方法禁用外键:
SET FOREIGN_KEY_CHECKS = 1;
SET GLOBAL FOREIGN_KEY_CHECKS = 1;
然后迁移您的数据库。
再次应用外键约束:
SET FOREIGN_KEY_CHECKS = 0;
SET GLOBAL FOREIGN_KEY_CHECKS = 0;
答案 1 :(得分:0)
好吧,最后我找到了解决这个错误的方法,
首先,您需要进行迁移以删除外键和列,这是代码:
public function up()
{
Schema::disableForeignKeyConstraints();
Schema::table('tb_users', function(Blueprint $table){
$table->dropForeign('tb_users_id_level_foreign');
$table->dropColumn('id_level');
});
Schema::enableForeignKeyConstraints();
}
然后迁移它,之后它将删除列和外键。
之后删除 Schema :: table 代码,保存并运行命令:
php artisan migrate:reset
嗯,它有效,但这确实是一种不切实际的方式,
希望那里有更简单的方法,而不是这个。