使用雄辩的语言截断拉拉维尔中的所有表格

2022-08-30 14:27:56

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


答案 1

注意:执行此操作需要包doctrine/dbal

因此,请确保已安装composer require doctrine/dbal

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();
}

帮助:如果你有一些错误,如

SQLSTATE[42000]:语法错误或访问冲突:1701 无法截断外键约束中引用的表

您可以禁用外键检查

Schema::disableForeignKeyConstraints();

并确保重新启用

Schema::enableForeignKeyConstraints();

答案 2

这是我根据罗@Hao给出的答案。此外,它还具有以下优点:

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

希望你喜欢它!:)


推荐