使用雄辩的语言截断拉拉维尔中的所有表格
有没有办法使用雄辩或流利的laravel 4截断数据库中的所有表格?我不想指定表名,我只想截断所有表。换句话说,清空所有表。
有没有办法使用雄辩或流利的laravel 4截断数据库中的所有表格?我不想指定表名,我只想截断所有表。换句话说,清空所有表。
注意:执行此操作需要包
doctrine/dbal
因此,请确保已安装composer require doctrine/dbal
$tableNames = Schema::getConnection()->getDoctrineSchemaManager()->listTableNames();
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();
这是我根据罗@Hao给出的答案。此外,它还具有以下优点:
代码如下:
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");
希望你喜欢它!:)