如何正确删除Laravel 5.3中用户表列中的“唯一”列属性?

问题描述 投票:1回答:2

在早期的教程之后,我留下了一个设置为唯一的“用户名”列。我想改变它,以便我的唯一用户标识符与电子邮件绑定。

我已经完成了我找到的步骤:

  • 作曲家需要学说/ dbal
  • php artisan make:migration modify_users_table --table = users

我的迁移包含:

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

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

[照亮\数据库\ QueryException] SQLSTATE [42000]:语法错误或访问冲突:1280索引名称错误''(SQL:alter table users add unique(us) ername))

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

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


从我最初的研究看来,问题出在我的索引上:

users_username_unique

所以我的问题是:

删除该索引是否安全,然后运行迁移? 如果这是正确的方法,我的迁移是否需要具有以下内容:

$table->dropUnique('users_username_unique');

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

$table->string('username')->unique(false)->change();
php mysql laravel laravel-5.3
2个回答
1
投票

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

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

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

$table->unique('email');

Database: Migrations


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.