使用eloquent截断laravel中的所有表

Mou*_*nir 19 php database fluent laravel eloquent

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

Hao*_*Luo 44

1.获取所有表名

$tableNames = Schema::getConnection()->getDoctrineSchemaManager()->listTableNames();
Run Code Online (Sandbox Code Playgroud)

2.遍历表名数组并使用Schema Builder截断

foreach ($tableNames as $name) {
    //if you don't want to truncate migrations
    if ($name == 'migrations') {
        continue;
    }
    DB::table($name)->truncate();
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,Doctrine将作为Laravel 4.1中的依赖项消失,因此在发布新版本时,此过程可能会发生变化. (3认同)
  • 是的,你只需要手动安装"doctrine/dbal":"~2.5.0". (2认同)

fzy*_*cjy 12

这是我基于@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");
Run Code Online (Sandbox Code Playgroud)

希望你喜欢!:)