Есть ли способ определить, существует ли таблица базы данных с Laravel?

87

Я хочу иметь возможность создать таблицу, используя

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

Но перед этим я хотел бы проверить, существует ли уже таблица, возможно, что-то вроде

Schema::exists('mytable');

Однако указанной выше функции не существует. Что еще я могу использовать?

Эхсан Заргар Эршади
источник
Не могли бы вы сказать, в какой файл вы добавили этот код?
Yasser Moussa

Ответы:

218

Если вы используете Laravel 4 или 5, то есть hasTable()метод, вы можете найти его в исходном коде L4 или в документации 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', Я использовал, DB::hasTable('test')потому что класс схемы не найден.
151291
10
попробуйте DB :: connection ('xxxx') -> getSchemaBuilder () -> hasTable ('xxx')
окончание
Я пробую это, и это работает ...DB::getSchemaBuilder()->hasTable('table_name_without_prefix')
Syamsoul Azrien
Schema :: connection ("bio_db") -> hasTable ('deviceLogs_11_2019')
панкадж кумар
23

Чтобы создать новую таблицу, есть только одна проверка функцией схемы Laravel hasTable.

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

Но если вы хотите удалить любую таблицу перед проверкой ее существования, тогда у схемы есть вызываемая функция dropIfExists.

Schema::dropIfExists('table_name');

Таблица будет удалена, если таблица существует.

Brn.Rajoriya
источник
4

если вы используете другое соединение, вам нужно пойти с моим ответом.

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

здесь, в hasTable()функции, вы можете передать более 1 имени таблицы.

панкадж кумар
источник
3

В L3 нет встроенной функции для этого. Вы можете выполнить необработанный запрос:

$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
Спасибо! .. Я использую Laravel 3.
Эхсан Заргар Эршади,
Это не полностью совместимо для разных типов баз данных. Например, он не работает с Sqlite или Oracle.
Benubird
0

Скорее полагайтесь на запрос информационной схемы вместо проверки некоторых данных в таблицах с COUNT().

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

Измените свою 'table_name'ценность.

Если вы получаете одну строку, это означает, что таблица существует.

Бимал Пудель
источник
0

Как ответил Фил Спаркс, вы можете проверить, существует ли таблица, используя:

Schema::hasTable('mytable')

Обратите внимание, что в некоторых случаях ваше приложение использует разные подключения. В этом случае следует использовать:

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

(Не забудьте использовать use Schema;в начале кода).

гуялони
источник