一次性删除数据库中的所有表

时间:2016-02-29 07:58:18

标签: laravel-5

如何在laravel中一次性删除数据库中的所有表。

对于迁移,我们使用 -

Artisan::call('migrate', ['--force' => true]);

但删除所有表格都有 -

谢谢

5 个答案:

答案 0 :(得分:4)

为什么不使用它:

Artisan::call('migrate:reset', ['--force' => true]);

答案 1 :(得分:4)

Laravel 5.6 documentation中,他们指定了以下内容,

  

migrate:reset命令将回滚所有应用程序的迁移:

     

php artisan migrate:reset

答案 2 :(得分:0)

您可以使用Controller方法来实现

public function drop_tables(){
    $tables = DB::select('SHOW TABLES');
    foreach($tables as $table){
        Schema::drop($table->Tables_in_pos);
        echo 'Table '.$table->Tables_in_pos.' Droped. <br>';
    } 

}

根据您的要求进行调用。

这将删除当前数据库中存在/存在的所有表

答案 3 :(得分:0)

这是对dipenparmat12答案的改进。避免了数据库名称和外键约束的问题。

\DB::statement('SET FOREIGN_KEY_CHECKS = 0;');
$tables = \DB::select('SHOW TABLES');
foreach($tables as $table){
    $table = implode(json_decode(json_encode($table), true));
    \Schema::drop($table);
    echo 'Dropped `'.$table . '`. ';
}
\DB::statement('SET FOREIGN_KEY_CHECKS = 1;');

在迁移中误命名表的情况下,可接受的答案不起作用。我自己在开发过程中就这样做了;这就是为什么我着手解决此堆栈交换问题的原因。我在op()方法中将错字放在表中,但在down()方法中将其正确命名。这是一个例子。

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('misnamed', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name')->uniq();
        $table->timestamps();
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::drop('properly_named');
}

这将导致回滚,重置和刷新失败,因为迁移器尝试删除不存在的表:

$ artisan migrate:refresh
In Connection.php line 664:
  SQLSTATE[42S02]: Base table or view not found: 1051 Unknown table 'app.properly_named' (SQL: drop table `properly_named`)
In Connection.php line 458:
  SQLSTATE[42S02]: Base table or view not found: 1051 Unknown table 'app.properly_named'

$ artisan migrate:rollback
In Connection.php line 664:
  SQLSTATE[42S02]: Base table or view not found: 1051 Unknown table 'app.properly_named' (SQL: drop table `properly_named`)
In Connection.php line 458:
  SQLSTATE[42S02]: Base table or view not found: 1051 Unknown table 'app.properly_named'

$ artisan migrate:reset --force
In Connection.php line 664:
  SQLSTATE[42S02]: Base table or view not found: 1051 Unknown table 'app.properly_named' (SQL: drop table `properly_named`)
In Connection.php line 458:
  SQLSTATE[42S02]: Base table or view not found: 1051 Unknown table 'app.properly_named'

我怀疑取消中断的唯一方法是在SQL中手动删除表,但是我不想经历键入这些语句的麻烦。如果一次犯错,我肯定会再次犯错,所以我想要一种对所有表执行SQL DROP的方法,并避免所有迁移和回滚逻辑。

dipenparmar12的答案是朝着正确方向迈出的第一步;对我来说,唯一的问题是我有外键,并且MySQL不会删除具有外键关系的表,除非首先专门删除那些关系。

但是,您可以告诉MySQL在删除表时忽略外键检查,这就是我的答案。

如果您将迁移弄乱到这些命令中断的地步,并且只想删除所有表并重新开始,则此答案将完成工作。

答案 4 :(得分:0)

const object = [{
    "@UF": "SP",
    "@SIGLA": "PJ",
    "@NUM_CONSELHO": "111",
    "@NOME": "JAMIL ANDRÉ",
    "@ID_PROFISSIONAL": "1221212"
  },
  {
    "@UF": "RJ",
    "@SIGLA": "CLT",
    "@NUM_CONSELHO": "2222",
    "@NOME": "POCARRONTAS",
    "@ID_PROFISSIONAL": "212121212"
  },
];
var newArray = object.map((i, k) => {
  var newObj={};
  for (let key in i) {
    var str = key.split('@');
    newObj[str[1]] = i[key];
  }
 return newObj;
});

console.log(newArray);

如果您使用Laravel 6.x,这是删除所有表格,表格类型和视图的快速方法。

完整说明:

php artisan db:wipe
  • $ php artisan db:wipe {--database=} {--drop-views} {--drop-types} {--force} -要使用的数据库连接
  • database-删除所有表格和视图
  • drop-views-删除所有表和类型(仅适用于Postgres)
  • drop-types-强制操作在生产中运行

It was implemented on Aug 20, 2019

此更改也已在内部影响db:fresh命令的功能。现在,它只调用force,然后调用db:wipe