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

Luí*_*ruz 12 php mysql laravel

架构\生成器类有一个hasTable()hasColumn()方法来检查一个表和一个柱的存在,分别.

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

Luí*_*ruz 15

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

例如:

$keyExists = DB::select(
    DB::raw(
        'SHOW KEYS
        FROM your_table_name
        WHERE Key_name=\'your_key_name\''
    )
);
Run Code Online (Sandbox Code Playgroud)

只需替换your_table_nameyour_key_name获取正确的值.

  • Laravel使用Doctrine(尤其是Schema),因此`doctrine/dbal`的`listTableIndexes()`可能是一个比MySQL特定的`DB :: raw`调用更好的解决方案.http://doctrine-dbal.readthedocs.org/en/latest/reference/schema-manager.html (7认同)
  • @ceejayoz要在Laravel中获取Doctrine Manager:`$ conn = Schema :: getConnection() - > getDoctrineSchemaManager()` (4认同)
  • @ceejayoz谢谢你.我今天学到了一些东西:) (2认同)

Jea*_*uiz 9

如果您使用的是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) {

}
Run Code Online (Sandbox Code Playgroud)