сократите все таблицы в laravel с помощью красноречивого


Есть ли способ, которым я мог бы сократить все таблицы в бд, используя красноречивый или свободно владеющий laravel 4? Я не хочу указывать имена таблиц, я просто хочу усечь все таблицы. Другими словами, опустошите все столы.

Author: Mounir, 2013-09-20

4 answers

1. Получить все имена таблиц

$tableNames = Schema::getConnection()->getDoctrineSchemaManager()->listTableNames();

2. Выполните цикл по массиву имен таблиц и выполните усечение с помощью построителя схем

foreach ($tableNames as $name) {
    //if you don't want to truncate migrations
    if ($name == 'migrations') {
        continue;
    }
    DB::table($name)->truncate();
}
 36
Author: Hao Luo, 2013-09-20 06:19:52

Вот как я усекаю все таблицы внутри базы данных (включая исключения таблиц), это работает для меня.

    // 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();
    }
 0
Author: Mochamad Gufron Efendi, 2014-07-21 01:10:48

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

  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");

Надеюсь, вам понравится!:)

 0
Author: fzyzcjy, 2018-06-18 07:31:39

Это быстрый способ удалить базу данных и создать ее заново:

    // Get db name
    $db = DB::connection()->getDatabaseName();;
    // Delete db
    DB::statement('DROP DATABASE `'.$db.'`');
    // Create db
    DB::statement('CREATE DATABASE `'.$db.'`');

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

 -7
Author: TechyTimo, 2016-08-09 09:58:12