在Laravel 5中重命名索引

时间:2017-02-27 08:11:07

标签: laravel laravel-5 laravel-5.2 laravel-5.1

我想在Laravel 5中重命名一个索引。

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

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

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

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

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

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

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

我该怎么做?

更新

Laravel似乎并不支持这种原生。请提出问题:

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

3 个答案:

答案 0 :(得分:3)

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

$table->dropIndex('blah');

并使用所需名称a_blah制作新的。

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

你应该先:

$table->dropIndex('your_full_name_index')

然后做

$table->index('new_index_name')