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ć?
Odpowiedzi:
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');
źródło
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.DB::getSchemaBuilder()->hasTable('table_name_without_prefix')
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ć.
źródło
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.źródło
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 … }
źródło
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.
źródło
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).źródło