我在从Laravel应用程序中删除一些外键时遇到问题。问题出现在我尝试回滚迁移时:
php artisan migrate:rollback
我不知道为什么控制台中出现错误:
[说明\数据库\查询异常] SQLSTATE[42000]:语法错误或访问冲突:1091无法删除“角色用户用户标识外部”;检查列/键是否存在(SQL:更改表role_user
删除外键role_user_user_id_foreign
)
[教义\数据库应用程序\驱动程序\PDF异常] SQLSTATE[42000]:语法错误或访问冲突:1091无法删除“角色用户用户标识外部”;检查列/键是否存在
[PDF异常] SQL状态[42000]:语法错误或访问冲突:1091无法删除“角色用户用户标识外部”;检查列/键是否存在
下面是我的迁移类:
class UpdateRoleUserTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
schema::table('role_user',function(Blueprint $table){
$table->foreign('user_id')->references('id')->on('users');
$table->foreign('role_id')->references('id')->on('roles');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('role_user', function (Blueprint $table) {
$table->dropForeign('role_user_user_id_foreign');
$table->dropForeign('role_user_role_id_foreign');
});
}
}
我在数据库中的表已由迁移类创建:
class CreateRoleUserTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('role_user', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->integer('role_id')->unsigned();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('role_user');
}
}
4条答案
按热度按时间vjrehmav1#
在Laravel的所有〉4.0版本中,它允许将列名放入数组中,然后它将自己解析该数组。我试图找到附带的文档,但他们似乎将其遗漏了。
在更新迁移中,请尝试以下操作:
q3qa4bjr2#
我刚刚遇到了这个问题,问题是由于
$table->dropForeign([column_name]);
删除了索引而不是列本身,解决方案是在down
函数中删除一个块中的索引,然后在另一个块中删除实际的列。必须在单独的块中删除它们,因为有些事情与不能在列所在的同一连接中删除键有关掉了。因此,
down
函数应如下所示:现在您可以运行
php artisan migrate
来运行up
函数,运行php artisan migrate:rollback
来运行down
命令,错误不再显示。rxztt3cl3#
我已经修改了下面的代码。
将
onDelete()
和onUpdate()
添加到代码中。bq9c1y664#
在Laravel 9.x中,您不需要指定单独的外键删除。