重命名 Laravel 5 中的索引

Rename an index in Laravel 5

我想重命名 Laravel 5 中的索引。

在之前的迁移中,为 table 创建了一个名为 a 的列,如下所示:

$table->unsignedInteger('foo')->index('blah');

我想重命名索引,以便它使用默认的 Laravel 表示法。

即我想将 blah 索引重命名为 a_blah.

我知道如何重命名普通列,如下所示:

$table->renameColumn('from', 'to');

但是文档没有提到如何重命名索引。

我该怎么做?

更新

似乎Laravel 本身不支持这个。请对该问题投赞成票:

https://github.com/laravel/internals/issues/443

你首先应该:

$table->dropIndex('your_full_name_index')

然后

$table->index('new_index_name')

我认为 Laravel 不支持任何重命名索引的方法,您应该删除旧索引 blah

$table->dropIndex('blah');

并使用所需的名称创建新的 a_blah

$table->index('foo', 'a_blah');

Laravel 5.6 现在支持重命名索引:

$table->renameIndex('from', 'to')

https://laravel.com/docs/5.6/migrations#renaming-indexes

Laravel <= 5.5

的旧答案

正如@KuKec 提到的,似乎 Laravel 没有对重命名索引的本地支持。但是你可以使用原始 SQL。例如在 MySQL 中它会是这样的:

DB::statement('RENAME INDEX old_index TO new_index');

这也可能比删除和重新索引更有效(尤其是在大型数据库上)。

我还为功能请求创建了一个问题,以便更好地支持它。请在这里点赞:https://github.com/laravel/internals/issues/443