2015-05-28 34 views
7

'da benzersiz bir dizin anahtarının olup olmadığını kontrol edin Schema\Builder sınıfı, bir tablonun ve bir sütunun varlığını kontrol etmek için sırasıyla ve hasColumn() yöntemlerine sahiptir.Laravel

Bir dizin anahtarının (benzersiz anahtar gibi) olup olmadığını kontrol etmek için herhangi bir yöntem veya yöntem var mı?

cevap

12

Laravel bir anahtarın varlığını kontrol etmek için herhangi bir yöntem sağlamazken, herhangi bir of the available queries in MySQL kullanabilir ve DB::select()'u kullanabilirsiniz. Örneğin

:

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

Sadece doğru değerler için your_table_name ve your_key_name değiştirin.

+7

laravel noktalar (özellikle Şema) içinde Doctrine kullanır() 'daha iyi bir çözüm olabilir MySQL'e özgü bir "DB :: raw" çağrısından daha fazla. http://doctrine-dbal.readthedocs.org/en/latest/reference/schema-manager.html – ceejayoz

+2

@ceejayoz Bunun için teşekkürler. Bugün bir şey öğrendim :) –

+4

@ceejayoz Laravel'de Doktrin Yöneticisi'ni almak için: '$ conn = Şema :: getConnection() -> getDoctrineSchemaManager()' – shrimpwagon

5

Laravel'i kullanıyorsanız, büyük olasılıkla bir Eloquent gibi bir ORM'ye erişiminiz olacaktır. Eğer anlamlı kullandığınız varsayarsak, böyle bir şey yapmak mümkün olabilir: yani `doktrin/dbal` en` listTableIndexes

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

}