我想在Laravel 5中重命名一个索引。
在之前的迁移中,为名为a
的表创建了一个列,如下所示:
$table->unsignedInteger('foo')->index('blah');
我想重命名索引,以便它使用默认的Laravel表示法。
即。我想将blah
索引重命名为a_blah
。
我知道如何重命名普通列,如下所示:
$table->renameColumn('from', 'to');
但是文档没有提到如何重命名索引。
我该怎么做?
更新
Laravel似乎并不支持这种原生。请提出问题:
答案 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')