是否可以在laravel中使用包含的列构建索引(类似SQL服务器)

问题描述 投票:0回答:2

在 SQL Server 中,可以构建包括列的索引,如下所示:

CREATE UNIQUE INDEX ix_cust_email_inc
ON sales.customers(email)
INCLUDE(first_name,last_name);

可以在 Laravel 上的迁移中做类似的事情吗?

目前,我可以创建这样的索引,正如您所见,它没有

INCLUDE
功能:

$table->index(['email']);
laravel indexing include
2个回答
0
投票

Laravel 8.x 的答案是可以,但不能使用任何 Laravel 工具。您只需将代码作为原始 sqlserver 查询运行即可。

代码应该如下所示:

use Illuminate\Support\Facades\DB;
use Illuminate\Database\Migrations\Migration;

class MyMigration extends Migration{
    public function up(){
        if(config('database.default')=="sqlsrv"){
            DB::statement("CREATE INDEX index_name ON table_name (column_name_1,column_name_1) INCLUDE (column_name_3, column_name_4);");
        }
    }
}

这是laravel的索引用法https://laravel.com/docs/8.x/migrations#creating-indexes,这里是执行原始sql代码的方法https://laravel.com/docs/ 8.x/database#running-queries


0
投票

您可以为此创建宏:

protected function indexWithInclude(): callable
{
    return function (array $columns, array $includeColumns, string $name = null) {
        $index = implode(', ', $columns) . ') INCLUDE (' . implode(', ', $includeColumns);
        /** @var Blueprint $this */
        return $this->rawIndex($index, $name);
    };
}

启用宏:

Blueprint::mixin(new MacrosMigration());

用途:

$table->indexWithInclude(['columns array'], ['include columns array'], 'index name');
© www.soinside.com 2019 - 2024. All rights reserved.