Чи є спосіб виявити, чи існує таблиця бази даних із Laravel


87

Я хочу мати можливість створити таблицю за допомогою

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

Але перед цим я хотів би перевірити, чи вже існує таблиця, можливо щось на зразок

Schema::exists('mytable');

Однак вищевказаної функції не існує. Що ще я можу використати?


Чи можете ви сказати, до якого файлу ви додали цей код?
Ясер Мусса,

Відповіді:


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')
efinal

я пробую це, і це працює ...DB::getSchemaBuilder()->hasTable('table_name_without_prefix')
Syamsoul Azrien

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

23

Для створення нової таблиці існує лише одна перевірка функцією схеми Laravel hasTable.

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

Але якщо ви хочете скинути будь-яку таблицю перед тим, як перевірити її існування, тоді у Schema є функція, що викликається dropIfExists.

Schema::dropIfExists('table_name');

Якщо таблиця буде існувати, вона скине таблицю.


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.
Ehsan Zargar Ershadi

Це не повністю перехресне сумісність для всіх типів баз даних. Наприклад, це не працює з Sqlite або Oracle.
Benubird

0

Навпаки, залежать від запиту інформаційної схеми, замість того, щоб перевіряти деякі дані в таблицях за допомогою COUNT().

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

Змініть своє 'table_name'значення.

Якщо ви отримаєте один рядок, це означає, що таблиця існує.


0

Як відповів Phill Sparks, ви можете перевірити, чи існує таблиця, використовуючи:

Schema::hasTable('mytable')

Зверніть увагу, що в деяких випадках ваш додаток використовує різні зв’язки. У цьому випадку слід використовувати:

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.