Php laravel迁移:回滚错误
Laravel版本5.1.43(LTS) 我在终端中使用Php laravel迁移:回滚错误,php,mysql,laravel,laravel-5,Php,Mysql,Laravel,Laravel 5,Laravel版本5.1.43(LTS) 我在终端中使用php-artisan-migrate:rollback,然后返回错误消息。但是数据库被改变了。然后我再次输入此命令,没有错误消息 有人能帮我解决这个问题吗 [照亮\数据库\查询异常] SQLSTATE[42000]:语法错误或访问冲突:1091无法删除'user_id';检查列/键是否存在(SQL:alter tablecrm\u userdrop indexuser\u id) [例外情况] SQLSTATE[42000]:语法错误或访
php-artisan-migrate:rollback
,然后返回错误消息。但是数据库被改变了。然后我再次输入此命令,没有错误消息
有人能帮我解决这个问题吗
[照亮\数据库\查询异常]
SQLSTATE[42000]:语法错误或访问冲突:1091无法删除'user_id';检查列/键是否存在(SQL:alter tablecrm\u user
drop indexuser\u id
)
[例外情况]
SQLSTATE[42000]:语法错误或访问冲突:1091无法删除“user_id”;检查列/键是否存在
我的迁移代码
public function down()
{
if (Schema::hasColumn('crm_user', 'user_id')) {
Schema::table('crm_user', function (Blueprint $table) {
$table->dropColumn('user_id');
$table->dropIndex('user_id');
});
}
}
删除列时,索引将自动删除。因此,当您尝试单独删除索引时,您会得到一个错误,即它不存在 因此,要么交换订单,要么先删除索引:
$table->dropIndex('user_id');
$table->dropColumn('user_id');
或者干脆删除列,不用担心索引
从MySQL手册:
如果从表中删除列,则这些列也将从它们所属的任何索引中删除。如果删除了构成索引的所有列,则该索引也将被删除
从文件中
若要删除索引,必须指定索引的名称。默认情况下,Laravel会自动为索引指定一个合理的名称。只需连接表名、索引列的名称和索引类型即可
从“geo”表中删除基本索引
$table->dropIndex('geo_state_index')
从
要删除索引,您需要在[]
中指定列的名称
而且首先需要删除索引,然后删除列
$table->dropIndex(['user_id']);
$table->dropColumn('user_id');
$table->dropIndex(['user_id']);
$table->dropColumn('user_id');