重命名 Laravel 5 中的索引

Yah*_*din 6 laravel laravel-5 laravel-5.1

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

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

$table->unsignedInteger('foo')->index('blah');
Run Code Online (Sandbox Code Playgroud)

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

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

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

$table->renameColumn('from', 'to');
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能做到这一点?

更新

看来 Laravel 本身并不支持这个。请对这个问题点赞:

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

Yah*_*din 8

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

$table->renameIndex('from', 'to')
Run Code Online (Sandbox Code Playgroud)

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');
Run Code Online (Sandbox Code Playgroud)

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

我还为功能请求创建了一个问题,因此得到了更好的支持。请在这里投票:https://github.com/laravel/internals/issues/443