使用查询生成器在Laravel中添加全文索引


Using query builder for adding fulltext index in Laravel

这是在MySQL中添加全文索引的查询:

ALTER TABLE `TableName`
ADD FULLTEXT INDEX `IndexName` (`ColumnName`);

但是如何使用Laravel查询生成器添加全文索引?

应该这样做:DB::statement

DB::statement('ALTER TABLE TableName ADD FULLTEXT INDEX IndexName (ColumnName)');

更新:自Laravel起>=8.74.0本机支持全文索引,请参阅文档:https://laravel.com/docs/8.x/migrations#available-索引类型

关于Laravel>=6.15.0您可以像这样扩展Illuminate'Database'Schema'Grammars'MySqlGrammarIlluminate'Database'Schema'Blueprint类(例如,在AppServiceProviderboot()方法上):

use Illuminate'Database'Schema'Blueprint;
use Illuminate'Database'Schema'Grammars'MySqlGrammar;
use Illuminate'Support'Fluent;
Blueprint::macro('fulltext', function ($columns, $name = null, $algorithm = null)
{
    return $this->indexCommand('fulltext', $columns, $name, $algorithm);
});
Blueprint::macro('dropFulltext', function ($index)
{
    return $this->dropIndexCommand('dropIndex', 'fulltext', $index);
});
MySqlGrammar::macro('compileFulltext', function (Blueprint $blueprint, Fluent $command)
{
    return $this->compileKey($blueprint, $command, 'fulltext');
});

并在迁移中使用它,如下所示:

Schema::table('flights', function (Blueprint $table) {
    $table->fulltext(['name', 'airline']);
});
//reverse the migration
Schema::table('flights', function (Blueprint $table) {
    $table->dropFulltext(['name', 'airline']);
});

对于多个Columns/Fields

DB::statement('ALTER TABLE Database.TableName ADD FULLTEXT fulltext_index (Col_1, col_2, col_3)');