检查 Laravel 中是否存在唯一的索引键

2022-08-31 00:43:23

Schema\Builder 类具有 and 方法,分别用于检查表和列是否存在。hasTable()hasColumn()

是否有任何方法或途径来检查索引键(如唯一键)是否存在?


答案 1

虽然Laravel没有提供任何方法来检查密钥的存在,但你可以使用MySQL中的任何可用查询,然后使用。DB::select()

例如:

$keyExists = DB::select(
    DB::raw(
        'SHOW KEYS
        FROM your_table_name
        WHERE Key_name=\'your_key_name\''
    )
);

只需替换 和 正确的值。your_table_nameyour_key_name


答案 2

如果您使用的是Laravel,那么您很可能会访问像Eloquent这样的ORM。假设您正在使用Eloquent,则可以执行以下操作:

try {
    Schema::table(
        'the_name_of_your_table',
        function (Blueprint $table) {
            $sm = Schema::getConnection()->getDoctrineSchemaManager();
            $indexesFound = $sm->listTableIndexes('the_name_of_your_table');

            $indexesToCheck = [
                'index_name_1',
                'index_name_2',
                'index_name_3',
                'index_name_4'
            ];

            foreach ($indexesToCheck as $currentIndex) {
                if (array_key_exists($currentIndex, $indexesFound)) {
                    // The current index exists in the table, do something here :)
                }
            }
        }
    );
} catch (Exception $e) {

}

推荐