Php 如何删除连接到另一个数据库中表的架构?
在我的Laravel应用程序中,我有到不同数据库的连接,当我需要使用新的虚拟数据刷新每个数据库中的表时(我使用Php 如何删除连接到另一个数据库中表的架构?,php,database,laravel,migration,Php,Database,Laravel,Migration,在我的Laravel应用程序中,我有到不同数据库的连接,当我需要使用新的虚拟数据刷新每个数据库中的表时(我使用php artisan migrate:fresh--seed命令),我总是会出现此错误 SQLSTATE[42S01]:基表或视图已存在:1050表“table_name”已存在 这很奇怪,因为我的迁移类中有down()方法 class CreateExampleTable extends Migration { /** * Run the migrations.
php artisan migrate:fresh--seed
命令),我总是会出现此错误
SQLSTATE[42S01]:基表或视图已存在:1050表“table_name”已存在
这很奇怪,因为我的迁移类中有down()
方法
class CreateExampleTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::connection('conn2')->create('table_name', function (Blueprint $table) {
$table->bigIncrements('id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::connection('conn2')->dropIfExists('table_name');
}
}
如果使用
migrate:refresh
而不是fresh
,它将使用down()
方法回滚数据库
我认为问题不在于您的down()
,而在于您的up()
:它正在尝试创建一个表,但具有该名称的表已经存在
我建议采取以下措施:
if (!Schema::hasTable('tbl_name')) {
// create table
}
您可能还必须指定在迁移中使用的数据库。这是因为
fresh
命令实际上没有运行down()
方法,它只是删除所有表。这可能不起作用的另一个原因是,除非指定连接,db
artisan命令仅使用默认连接。作为参考,此行为将在中详细描述和讨论。不幸的是,Laravel(Taylor)对支持这种功能没有兴趣。