2015-05-28 44 views

回答

12

虽然Laravel不提供任何方法来检查密钥的存在,但您可以使用任何of the available queries in 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

+7

Laravel使用学说的斑点(尤其是架构),所以'学说/ dbal'的'listTableIndexes()'可能是一个更好的解决方案而不是一个特定于MySQL的'DB :: raw'调用。 http://doctrine-dbal.readthedocs.org/en/latest/reference/schema-manager.html – ceejayoz

+2

@ceejayoz谢谢你。我今天学到了一些东西:) –

+4

@ceejayoz为了得到Laravel中的Doctrine Manager:'$ conn = Schema :: getConnection() - > getDoctrineSchemaManager()' – shrimpwagon

5

如果您使用的是Laravel,那么您很可能会访问像Eloquent这样的ORM。假设你使用的口才,你也许能够做这样的事情:

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) { 

}