Обрезать все таблицы в laravel, используя красноречивый
Есть ли способ урезать все таблицы в db, используя красноречивый или свободно владеющий laravel 4? Я не хочу указывать имена таблиц, просто хочу усечь все таблицы. Другими словами, опущены все таблицы.
Ответы
Ответ 1
1. Получите все имена таблиц
$tableNames = Schema::getConnection()->getDoctrineSchemaManager()->listTableNames();
2. Пронумеруйте массив имен таблиц и обрезайте с помощью Schema Builder
foreach ($tableNames as $name) {
//if you don't want to truncate migrations
if ($name == 'migrations') {
continue;
}
DB::table($name)->truncate();
}
Ответ 2
В laravel 5 миграция: fresh удалит все таблицы в базе данных (даже если таблицы не связаны с миграцией)
Ответ 3
Вот мой ответ, основанный на @Хао Ло. Более того, у него есть эти плюсы:
- Вам не нужно устанавливать какой-либо дополнительный пакет (нет необходимости в доктрине)
- Хорошо поддерживает laravel 5
- Он отключает ограничение внешнего ключа (если вы урежете, не заботясь о заказах, и включите ограничение внешнего ключа, вы, скорее всего, получите ошибку)
Вот код:
DB::statement("SET foreign_key_checks=0");
$databaseName = DB::getDatabaseName();
$tables = DB::select("SELECT * FROM information_schema.tables WHERE table_schema = '$databaseName'");
foreach ($tables as $table) {
$name = $table->TABLE_NAME;
//if you don't want to truncate migrations
if ($name == 'migrations') {
continue;
}
DB::table($name)->truncate();
}
DB::statement("SET foreign_key_checks=1");
Надеюсь, тебе понравится! :)
Ответ 4
Вот как я усекаю все таблицы внутри базы данных (включая исключения таблицы), она работает для меня.
// set tables don't want to trucate here
$excepts = ['migrations'];
$tables = DB::connection()
->getPdo()
->query("SHOW FULL TABLES")
->fetchAll();
$tableNames = [];
$keys = array_keys($tables[0]);
$keyName = $keys[0];
$keyType = $keys[1];
foreach ($tableNames as $name) {
//if you don't want to truncate migrations
if (in_array($name[$keyName], $excepts))
continue;
// truncate tables only
if('BASE TABLE' !== $name[$keyType])
continue;
\DB::table($name)->truncate();
}
Ответ 5
Это быстрый способ удалить базу данных и заново ее создать:
// Get db name
$db = DB::connection()->getDatabaseName();;
// Delete db
DB::statement('DROP DATABASE `'.$db.'`');
// Create db
DB::statement('CREATE DATABASE `'.$db.'`');
Этот код также будет поддерживать соединение с базой данных.