如何在laravel中一次性删除数据库中的所有表。
对于迁移,我们使用 -
Artisan::call('migrate', ['--force' => true]);
但删除所有表格都有 -
谢谢
答案 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
。