2015-05-28 17 views

Trả lời

12

Trong khi Laravel không cung cấp bất kỳ phương pháp để kiểm tra sự tồn tại của một phím, bạn có thể sử dụng bất kỳ of the available queries in MySQL và sau đó sử dụng DB::select().

Ví dụ:

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

Chỉ cần thay thế your_table_nameyour_key_name cho các giá trị chính xác.

+7

Laravel sử dụng Học thuyết tại các điểm (đặc biệt là Schema), do đó 'doctrine/dbal' của' listTableIndexes() 'có thể là một giải pháp tốt hơn hơn một cuộc gọi 'DB :: raw' cụ thể là MySQL. http://doctrine-dbal.readthedocs.org/en/latest/reference/schema-manager.html – ceejayoz

+2

@ceejayoz Cảm ơn vì điều đó. Tôi đã học được điều gì đó ngày hôm nay :) –

+4

@ceejayoz Để có được Doctrine Manager trong Laravel: '$ conn = Schema :: getConnection() -> getDoctrineSchemaManager()' – shrimpwagon

5

Nếu bạn đang sử dụng Laravel thì rất có thể bạn sẽ có quyền truy cập vào ORM như Eloquent. Giả sử bạn đang sử dụng hùng hồn, bạn có thể làm điều gì đó như thế này:

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

} 
Các vấn đề liên quan