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

kyo*_*kyo 2 php database-migration laravel laravel-5

我有

现有的列cpe_mac。我是通过这样的迁移创建它的:

$table->string('cpe_mac')->default(NULL)->nullable();
Run Code Online (Sandbox Code Playgroud)

我想要

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


我试过了

$table->string('cpe_mac')->unique();
Run Code Online (Sandbox Code Playgroud)

迁移档案

<?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();
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

我一直

得到

SQLSTATE[42701]: Duplicate column: 7 ERROR:  column "cpe_mac" of relation "captive_portals" already exists
Run Code Online (Sandbox Code Playgroud)

是否可以在不删除现有专栏的情况下实现这一目标?

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

人们将如何实施呢?


目前,我愿意接受任何建议。

任何提示/建议/帮助对此将不胜感激!

Ale*_*nin 5

您需要使用change()方法:

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

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

$table->unique('email');
Run Code Online (Sandbox Code Playgroud)

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


小智 5

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

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