2015-05-28 30 views

Antwort

12

Während Laravel bietet keine Methode, um das Vorhandensein eines Schlüssels zu überprüfen, können Sie eine of the available queries in MySQL verwenden und dann DB::select() verwenden.

Zum Beispiel:

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

Ersetzen Sie einfach your_table_name und your_key_name für die richtigen Werte.

+7

Laravel verwendet Lehre in Flecken (insbesondere Schema), so 'Lehre/dbal' der' listTableIndexes() 'könnte eine bessere Lösung sein als ein 'DB :: raw'-Aufruf, der MySQL-spezifisch ist. http://doctrine-dbal.readthedocs.org/en/latest/reference/schema-manager.html – ceejayoz

+2

@ceejayoz Danke dafür. Ich habe heute etwas gelernt :) –

+4

@ceejayoz Um den Doctrine Manager in Laravel zu bekommen: '$ conn = Schema :: getConnection() -> getDoctrineSchemaManager()' – shrimpwagon

5

Wenn Sie Laravel verwenden, haben Sie höchstwahrscheinlich Zugang zu einem ORM wie Eloquent. Angenommen, Sie Eloquent verwenden, können Sie in der Lage sein, so etwas zu tun:

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

} 
Verwandte Themen