Обрезать все таблицы в 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

Вот мой ответ, основанный на @Хао Ло. Более того, у него есть эти плюсы:

  1. Вам не нужно устанавливать какой-либо дополнительный пакет (нет необходимости в доктрине)
  2. Хорошо поддерживает laravel 5
  3. Он отключает ограничение внешнего ключа (если вы урежете, не заботясь о заказах, и включите ограничение внешнего ключа, вы, скорее всего, получите ошибку)

Вот код:

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.'`');

Этот код также будет поддерживать соединение с базой данных.