2013-04-10 6 views
32

Chcę móc utworzyć tabelę przy użyciuCzy istnieje jakiś sposób, aby wykryć, czy tabela bazy danych istnieje z laravel

Schema::create('mytable',function($table) 
{ 
    $table->increments('id'); 
    $table->string('title'); 
}); 

ale przed tym chciałbym sprawdzić, jeśli tabela już istnieje, być może coś takiego

Schema::exists('mytable'); 

Jednak powyższa funkcja nie istnieje. Czego jeszcze mogę użyć?

+0

Czy możesz powiedzieć, do jakiego pliku dodałeś ten kod? –

Odpowiedz

105

Jeśli używasz laravel 4 lub 5 to nie jest metoda hasTable(), można go znaleźć in the L4 source code lub L5 docs:

Schema::hasTable('mytable'); 
+0

'call_user_func_array() oczekuje, że parametr 1 będzie prawidłowym oddzwanianiem, klasa 'Illuminate \ Database \ MySqlConnection' nie ma metody 'hasTable'', użyłem' DB :: hasTable (' test ') 'ponieważ nie znaleziono klasy Schema . – 151291

+0

try DB :: connection ('xxxx') -> getSchemaBuilder() -> hasTable ('xxx') – efinal

2

Brak wbudowanej funkcji w L3. Można zrobić surowego zapytanie:

$table = "foo"; 
$check = DB::only('SELECT COUNT(*) as `exists` 
    FROM information_schema.tables 
    WHERE table_name IN (?) 
    AND table_schema = database()',$table); 
if(!$check) // No table found, safe to create it. 
{ 
    // Schema::create … 
} 
+1

Dzięki! .. Używam Laravel 3. –

+0

Nie jest to w pełni kompatybilne z różnymi typami baz danych. Na przykład nie działa z Sqlite lub Oracle. – Benubird

0

Raczej zależą od informacji kwerendy schematu zamiast sprawdzania niektórych danych w tabelach z COUNT().

SELECT table_schema 
FROM information_schema.tables 
WHERE table_schema = DATABASE() 
     AND table_name = 'table_name'; 

Zmień wartość 'table_name'.

Jeśli otrzymasz jedno wyjście wiersza, oznacza to, że tabela istnieje.

6

Aby utworzyć nową tabelę istnieje tylko jedna kontrola funkcji Laravel Schema hasTable.

if (!Schema::hasTable('table_name')) { 
    // Code to create table 
} 

Ale jeśli chcesz usunąć dowolną tabelę przed sprawdzeniem jego istnienie następnie Schema mieć funkcję o nazwie dropIfExists.

Schema::dropIfExists('table_name'); 

Spowoduje to upuszczenie tabeli, jeśli tabela będzie istnieć.