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