有没有办法可以使用雄辩或流利的laravel 4来截断数据库中的所有表格?我不想指定表名,我只想截断所有表。换句话说,清空所有表格。
答案 0 :(得分:41)
$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();
}
答案 1 :(得分:1)
以下是基于@Hao Luo的答案。此外,它有这些优点:
以下是代码:
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 :(得分:1)
在laravel 5中,migrate:fresh将删除数据库中的所有表(即使表与迁移无关)
答案 3 :(得分: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();
}
答案 4 :(得分:0)
基于先前的答案,我将表名直接过滤到SQL查询中。我同意这是一个小的优化,但可以避免不必要的循环。
protected function truncateDatabase($excepts = []): void
{
$excepts = array_merge(['migrations'], $excepts);
\DB::statement('SET foreign_key_checks=0');
$table_names = \DB::query()->select('TABLE_NAME')->from('information_schema.tables')
->where('TABLE_SCHEMA', \DB::getDatabaseName())
->whereNotIn('TABLE_NAME', $excepts)
->get()
->pluck('TABLE_NAME')
->toArray();
foreach ($table_names as $table_name) {
\DB::table($table_name)->truncate();
}
\DB::statement('SET foreign_key_checks=1');
}
答案 5 :(得分:0)
使用此:
$tables = DB::select('SHOW TABLES');
// it do truncate all tables in database
foreach($tables as $table){
if ($table == 'migrations') {
continue;
}
DB::table($table->Tables_in_portal_test)->truncate();
}
记住要导入
使用Illuminate \ Support \ Facades \ DB;
PD:Tables_in_YOUR_DATABASE_NAME
答案 6 :(得分:0)
您可以将其添加到您的基本测试用例类中
protected static function truncateTableAll(array $skip = [])
{
Schema::disableForeignKeyConstraints();
foreach (Schema::getConnection()
->getDoctrineSchemaManager()
->listTableNames() as $name) {
if ($name == 'migrations' || in_array($name, $skip)) {
continue;
}
DB::table($name)->truncate();
}
Schema::enableForeignKeyConstraints();
}