如何使用迁移更改laravel 5.3中的现有表列

时间:2016-11-11 15:26:56

标签: php laravel-5 doctrine-orm

我有这个:

  

$表 - >整数( 'ROLE_ID') - >指数() - >无符号() - >可为空的();

但我想将其更改为:

  

$表 - >整数( 'ROLE_ID') - >指数() - >无符号() - >可为空() - >默认(3);

我本来想使用它,但我无法理解源语法:

  

php artisan make:migration update_role_id_in_users --table = users

我甚至尝试使用doctrine/ddbal包并运行它:

  

php artisan make:migration modify_role_id_in_users --table = users

迁移设置如下:

class ModifyRoleIdInUsers extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            //
            $table->integer('role_id')->index()->unsigned()->nullable()->default(3)->change();

        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            //
            $table->integer('role_id')->index()->unsigned()->nullable()->change();
        });
    }
}

但我在迁移时遇到此错误:

  

[Illuminate \ Database \ QueryException] SQLSTATE [42000]:语法错误   或访问冲突:1061重复键名'users_role_id_index'   (SQL:alter table'users'添加索引'users_role_id_index'('role_
  ID'))

     

[Doctrine \ DBAL \ Driver \ PDOException] SQLSTATE [42000]:语法错误   或访问冲突:1061重复的密钥名称'users_role_id_index'

     

[PDOException] SQLSTATE [42000]:语法错误或访问冲突:   1061重复键名'users_role_id_index'

如何在不执行column

的情况下更改migrate:refresh

2 个答案:

答案 0 :(得分:3)

您可以使用change()方法执行此操作:

$table->integer('role_id')->index()->unsigned()->nullable()->default(3)->change();
  

请务必在更新之前运行composer require doctrine/dbal   通过迁移的列

希望这有帮助!

答案 1 :(得分:0)

解决方案是:

  1. run composer require doctrine / ddbal
  2. 将我想要的更改default(3)添加到role_id column的末尾,如$table->integer('role_id')->index()->unsigned()->nullable()->default(3)->change();
  3. 运行php artisan migrate
  4. 这解决了它并且表格被改变了。