将表迁移到db ...表时已存在错误

时间:2019-05-21 13:10:50

标签: php mysql laravel migration

enter image description here

当我将表迁移到数据库时,会出现此错误

  

SQLSTATE [42S01]:基表或视图已存在:1050表'users'   已经存在(SQL:创建表usersid int unsigned not   auto_increment主键为空,body长文本不为空,url   varchar(255)null,user_id int unsigned不为null,commentable_id   int unsigned not null,commentable_type varchar(191)不为null,   created_a t时间戳为空,updated_at时间戳为空)默认   字符集utf8mb4整理utf8mb4_unicode_ci)在Connection.php第449行中:    SQLSTATE [42S01]:基本表或视图已存在:1050表   “用户”已经存在

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        if(!Schema::hasTable('users')){
            Schema::create('users', function (Blueprint $table) {
                $table->increments('id');
                $table-> string('name');
                $table-> string('email')->unique();
                $table-> string('password');
                $table->rememberToken();
                $table->timestamps();
            });
        }
        Schema::table('users', function(Blueprint $table){
            $table -> string('first_name') -> nullabel();
            $table -> string('middle_name') -> nullabel();
            $table -> string('last_name') -> nullabel();
            $table -> string('city') -> nullabel();
            $table -> integer('role') -> unsigned();
        });
    }

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

我从数据库中删除了所有表,然后尝试但给出了相同的错误

2 个答案:

答案 0 :(得分:0)

尝试分为两个迁移或一次添加所有字段:

const enumConstants = [
    'FIRST',
    'SECOND',
    'THIRD'
];

const temp = {};

for (const constant of enumConstants) {
    temp[constant] = constant;
}

const PlaceEnum = Object.freeze(temp);

console.log(PlaceEnum.FIRST);

// Or, in one line
const PlaceEnum2 = Object.freeze(enumConstants.reduce((o, c) => { o[c] = c; return o; }, {}));

console.log(PlaceEnum2.FIRST);

请注意:您还拼写了可为空的错误。

答案 1 :(得分:0)

可能您正在使用Laravel 5.5,因此您必须进行“ php artisan migration” ,而无需在启动方法中编辑您的 AppServiceProvider.php 文件。

因此,我建议您使用“ php artisan tinker” 从数据库中删除表,然后“ Schema :: drop('users')(并使用q退出)”

此后,您必须编辑“ AppServiceProvider.php” 文件,因此请使用此链接来帮助您:https://laravel-news.com/laravel-5-4-key-too-long-error

当您编辑完文件后,现在可以进行“ php artisan migration:rollback” ,然后执行“ php artisan migration”

与我合作!