如何正确删除 Laravel 5.3 中用户 table 列中的 'unique' 列属性?

How to correctly remove 'unique' column attribute in users table column in Laravel 5.3?

早期的后续教程给我留下了一个设置为唯一的 'username' 列。我想更改它,以便我的唯一用户标识符与电子邮件相关联。

我已完成找到的步骤:

我的迁移包含:

public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->string('username')->unique(false)->change();
    });
}

但是,当我 运行 命令 'php artisan migrate' 我得到

[Illuminate\Database\QueryException]
SQLSTATE[42000]:语法错误或访问冲突:1280 不正确的索引名称'' (SQL: alter table users add unique (us
ername))

[Doctrine\DBAL\Driver\PDOException]
SQLSTATE[42000]:语法错误或访问冲突:1280 不正确的索引名称''

[PDOException]
SQLSTATE[42000]:语法错误或访问冲突:1280 索引名称不正确''


根据我的初步研究,问题似乎出在我的索引上:

users_username_unique

所以我的问题是:

删除该索引然后 运行 迁移是否安全?
如果这是正确的方法,我的迁移是否需要像这样:

$table->dropUnique('users_username_unique');

那么这个命令会自动创建一个正确的,non-unique,索引吗?

$table->string('username')->unique(false)->change();

您需要创建一个新的迁移并使用dropUnique()方法:

Schema::table('users', function (Blueprint $table) {
    $table->dropUnique('users_username_unique');
});

然后运行composer duphp artisan migrate命令执行迁移。

删除唯一索引并添加普通索引。

$table->dropUnique(['username']);
$table->index('username');  

如果需要,为电子邮件添加唯一索引。

$table->unique('email');

Database: Migrations

对于 dropUnique() 方法,您必须创建一个新的迁移,

 Schema::table('users', function (Blueprint $table) {
         $table->dropUnique('username');  
 });

或者如果需要,您可以为用户名添加唯一索引。

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