使用eloquent截断laravel中的所有表

问题描述 投票:17回答:4

有没有办法我可以使用雄辩或流利的laravel 4来截断数据库中的所有表格?我不想指定表名,我只想截断所有表。换句话说,清空所有表。

php database laravel eloquent fluent
4个回答
42
投票

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
投票

以下是基于@Hao Luo的答案。此外,它有这些优点:

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

希望你喜欢! :)


2
投票

在laravel 5中,migrate:fresh将删除数据库中的所有表(即使表与迁移无关)


0
投票

这就是我如何截断数据库中的所有表(包括表异常),它适用于我。

    // 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();
    }
© www.soinside.com 2019 - 2024. All rights reserved.