首页 > 解决方案 > 如何通过连接到另一个数据库中的表来删除模式?

问题描述

在我的 Laravel 应用程序中,我连接到不同的数据库,当我需要用新的虚拟数据更新每个数据库中的表时(我使用 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');
    }
}

标签: phpdatabaselaravelmigration

解决方案


如果您使用migrate:refresh而不是fresh它将使用您的down()方法回滚数据库。

我认为问题不在于您的问题,而在于您的问题down()up()它正在尝试创建一个表,但是具有该名称的表已经存在。

我建议做类似的事情:

if (!Schema::hasTable('tbl_name')) {
     // create table
}

您可能还必须指定在迁移中使用的数据库。


推荐阅读