更新现有列属性 - Laravel 5迁移

时间:2017-02-01 19:03:17

标签: php laravel laravel-5 database-migration

我有

一个名为cpe_mac的现有列。我通过这样的迁移创建了它:

$table->string('cpe_mac')->default(NULL)->nullable();

我想要

我想将此->unique()添加到该列,而不必删除它并重新添加

我试过

$table->string('cpe_mac')->unique();

迁移文件

<?php

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

class AlterCaptivePortalTable212017 extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('captive_portals', function (Blueprint $table) {
            $table->string('cpe_mac')->unique();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('captive_portals', function (Blueprint $table) {
            $table->string('cpe_mac')->default(NULL)->nullable();
        });
    }
}

我保持

获得

SQLSTATE[42701]: Duplicate column: 7 ERROR:  column "cpe_mac" of relation "captive_portals" already exists

是否可以在不丢弃现有列的情况下实现此目的?

(我有很多无法删除的客户数据!)

如何实现这一目标?

我现在正在接受任何建议。

任何提示/建议/帮助都将非常感谢!

4 个答案:

答案 0 :(得分:4)

Schema::table('users', function (Blueprint $table) { $table->string('cpe_mac')->unique()->change(); });

https://laravel.com/docs/5.0/schema#changing-columns

答案 1 :(得分:2)

您需要使用change()方法:

Schema::table('captive_portals', function (Blueprint $table) {
    $table->string('cpe_mac')->unique()->change();
});

或者,您可以在定义列后创建索引。例如:

$table->unique('email');

https://laravel.com/docs/5.4/migrations#indexes

答案 2 :(得分:0)

如果已定义列,您可以使用:

$table->unique('cpe_mac');

答案 3 :(得分:0)

我遇到了同样的问题,这是Laravel 5.6的解决方案:

第一步:运行以下命令:handle(Http.outboundGateway("http://localhost:8055/greeting2?param1={param1}") .httpMethod(HttpMethod.GET) .uriVariable("param1", "payload") .expectedResponseType(String.class))

第二步:运行以下命令:composer require doctrine/dbal

步骤3:在添加的迁移中,在Schema :: table部分中添加php artisan make:migration THE -NAME_YOU_WANT --table=TABLENAME

第4步:运行以下命令:$table->string('cpe_mac')->unique()->change();