Laravel不允许我迁移表,因为它已经存在

时间:2017-04-03 13:53:01

标签: php mysql laravel eloquent

我正在尝试使用Laravel Migration创建SQL表,但它不会让我。

这是错误:

  

SQLSTATE [42S01]:基表或视图已存在:1050表   'mytable'已经存在

这是我的代码:

        Schema::create('mytable', function (Blueprint $table) {
            $table->increments('id');
            $table->foreign('othertable_id')
                ->references('id')->on('othertable')
                ->onDelete('cascade');
            $table->string('variable');
            $table->timestamps();
    });

    }

    {
        Schema::drop('mytable');
    }

我还检查了其他迁移是否被称为“mytable”,但它们不是,所以我不确定它来自何处。

我尝试了以下内容:

首先

php artisan migrate:refresh

哪个给了我一个错误

然后我删除了整个数据库altogheter并使用了:

php artisan migrate

仍然出现错误

7 个答案:

答案 0 :(得分:8)

在laravel 5.5和>中你可以使用:

  $ php artisan migrate:fresh 
  // ( not migrate:refresh wich is a different command)

此命令首先删除所有表,然后重新运行所有迁移

答案 1 :(得分:2)

我既没有删除迁移条目,也没有从数据库中手动删除表 就我而言,解决方案是打开作曲家的修补程序

$ php artisan tinker
>>> Schema::drop('users')
>>> Schema::drop('password_resets')
>>> Schema::drop('orders')
>>> exit
php artisan migrate

这是上述命令执行的结果

nishanth@localhost:~/Desktop/html/hutch$ php artisan migrate
  

在Connection.php第647行中:                                                                                     SQLSTATE [42S01]:基本表或视图已存在:1050表“用户”   确实存在(SQL:创建表usersid int unsigned not   auto_increment主键为空,name varchar(255)不为空,   email varchar(255)不为null,password varchar(255)不为null,   remember_token varchar(100)为空,created_at时间戳为空,   updated_at时间戳为null)默认字符集utf8mb4   整理utf8mb4_unicode_ci)

     

在Connection.php第449行中:                                                                                     SQLSTATE [42S01]:基本表或视图已存在:1050表“用户”   已经存在

nishanth@localhost:~/Desktop/html/hutch$ php artisan migrate:rollback
Nothing to rollback.
nishanth@localhost:~/Desktop/html/hutch$ php artisan tinker
Psy Shell v0.8.17 (PHP 7.1.20-1+ubuntu16.04.1+deb.sury.org+1 — cli) by Justin Hileman
>>> Schema::drop('users')
=> null
>>> Schema::drop('password_resets')
=> null
>>> Schema::drop('orders')
=> null
>>> exit
Exit:  Goodbye.
nishanth@localhost:~/Desktop/html/hutch$ php artisan migrate
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table
Migrating: 2018_08_18_071213_create_orders_table
Migrated:  2018_08_18_071213_create_orders_table
nishanth@localhost:~/Desktop/html/hutch$ 

还定义方法down()(如果不存在)。
否则,它将显示

  

SQLSTATE [42S02]:找不到基本表或视图:1051未知表'XYZ.ABC'(SQL:删除表ABC

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

答案 2 :(得分:2)

尝试一下

Up() 函数内的 Up() 函数中添加以下行:
Schema::dropIfExists('mytable');,然后为 mytable创建模式
即在执行以下代码之前。
Schema::create('mytable', function (Blueprint $table)

答案 3 :(得分:1)

错误表示数据库中已存在表mytable。您应该回滚迁移:

php artisan migrate:rollback

再次迁移:

php artisan migrate

答案 4 :(得分:1)

执行composer dump,从数据库中手动删除表,并删除要从迁移表中删除的表的迁移条目,然后重新运行迁移以查看发生的情况。

答案 5 :(得分:1)

如果您在数据库中有该表并且不想迁移创建该表,则可以通过在创建之前检查Schema :: hasTable来忽略它

public function up()
{
    if(Schema::hasTable('products')) return;       //add this line to migration file
    Schema::create('products', function (Blueprint $table) {
    $table->increments('id');
    $table->timestamps();
});

}

答案 6 :(得分:-1)

转到app> Providers> AppServiceProvider.php并将其复制粘贴到顶部:

use Illuminate\Support\Facades\Schema;

然后转到其中名为“ Boot()”的函数并复制并粘贴此代码:

Schema::defaultStringLength(191);

现在转到您的数据库并完全删除数据库,然后转到控制台:

php artisan cache:clear
php artisan config:cache

然后创建一个具有相同名称的新数据库,然后回到consol并编写:

 php artisan migrate (congrats your database now shows em all)