Czy istnieje sposób na wykrycie, czy w Laravel istnieje tabela bazy danych?


87

Chcę mieć możliwość tworzenia tabeli przy użyciu

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

Ale wcześniej chciałbym sprawdzić, czy stół już istnieje, może coś takiego

Schema::exists('mytable');

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


Czy możesz powiedzieć, do którego pliku dodałeś ten kod?
Yasser Moussa,

Odpowiedzi:


218

Jeśli używasz Laravel 4 lub 5, to istnieje hasTable()metoda, którą możesz znaleźć w kodzie źródłowym L4 lub w dokumentacji L5 :

Schema::hasTable('mytable');

call_user_func_array() expects parameter 1 to be a valid callback, class 'Illuminate\Database\MySqlConnection' does not have a method 'hasTable', Użyłem, DB::hasTable('test')ponieważ nie znaleziono klasy Schema.
151291

10
spróbuj DB :: connection ('xxxx') -> getSchemaBuilder () -> hasTable ('xxx')
ostateczny

próbuję tego i działa ...DB::getSchemaBuilder()->hasTable('table_name_without_prefix')
Syamsoul Azrien

Schemat :: connection ("bio_db") -> hasTable ('deviceLogs_11_2019')
kumar

23

Aby utworzyć nową tabelę, wystarczy jedno sprawdzenie przez funkcję Laravel Schema hasTable.

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

Ale jeśli chcesz usunąć dowolną tabelę przed sprawdzeniem jej istnienia, Schema ma funkcję o nazwie dropIfExists.

Schema::dropIfExists('table_name');

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


4

jeśli używasz innego połączenia, musisz odpowiedzieć na moje pytanie.

Schema::connection("bio_db")->hasTable('deviceLogs_11_2019')

tutaj w hasTable()funkcji możesz podać więcej niż 1 nazwę tabeli.


3

Brak wbudowanej funkcji w L3. Możesz wykonać surowe 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.
Ehsan Zargar Ershadi

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

0

Zamiast tego polegaj na zapytaniu dotyczącym schematu informacji, zamiast sprawdzać niektóre dane w tabelach za pomocą COUNT().

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

Zmień swoją 'table_name'wartość.

Jeśli otrzymasz jedno wierszowe dane wyjściowe, oznacza to, że tabela istnieje.


0

Jak odpowiedział Phill Sparks, możesz sprawdzić, czy tabela istnieje, używając:

Schema::hasTable('mytable')

Zwróć uwagę, że istnieją przypadki, w których Twoja aplikacja korzysta z różnych połączeń. W takim przypadku powinieneś użyć:

Schema::connection('myConnection')->hasTable('mytable')

(Nie zapomnij użyć use Schema;na początku swojego kodu).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.