Я хочу иметь возможность создать таблицу, используя
Schema::create('mytable',function($table)
{
$table->increments('id');
$table->string('title');
});
Но перед этим я хотел бы проверить, существует ли уже таблица, возможно, что-то вроде
Schema::exists('mytable');
Однако указанной выше функции не существует. Что еще я могу использовать?
Ответы:
Если вы используете 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')
потому что класс схемы не найден.DB::getSchemaBuilder()->hasTable('table_name_without_prefix')
Чтобы создать новую таблицу, есть только одна проверка функцией схемы Laravel
hasTable
.if (!Schema::hasTable('table_name')) { // Code to create table }
Но если вы хотите удалить любую таблицу перед проверкой ее существования, тогда у схемы есть вызываемая функция
dropIfExists
.Schema::dropIfExists('table_name');
Таблица будет удалена, если таблица существует.
источник
если вы используете другое соединение, вам нужно пойти с моим ответом.
Schema::connection("bio_db")->hasTable('deviceLogs_11_2019')
здесь, в
hasTable()
функции, вы можете передать более 1 имени таблицы.источник
В 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 … }
источник
Скорее полагайтесь на запрос информационной схемы вместо проверки некоторых данных в таблицах с
COUNT()
.SELECT table_schema FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = 'table_name';
Измените свою
'table_name'
ценность.Если вы получаете одну строку, это означает, что таблица существует.
источник
Как ответил Фил Спаркс, вы можете проверить, существует ли таблица, используя:
Schema::hasTable('mytable')
Обратите внимание, что в некоторых случаях ваше приложение использует разные подключения. В этом случае следует использовать:
Schema::connection('myConnection')->hasTable('mytable')
(Не забудьте использовать
use Schema;
в начале кода).источник