早期的教程给我留下了一个设置为唯一的“用户名”列。我想更改它,以便我的唯一用户标识符与电子邮件绑定。
我已经完成了我找到的步骤:
我的迁移包含:
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 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();
答案 0 :(得分:2)
对于dropUnique()方法,您必须创建一个新的迁移,
Schema::table('users', function (Blueprint $table) {
$table->dropUnique('username');
});
或如果需要,可以为用户名添加唯一索引。
Schema::table('users', function (Blueprint $table) {
$table->unique('username');
});
答案 1 :(得分:1)
删除唯一索引并添加普通索引。
$table->dropUnique(['username']);
$table->index('username');
如果需要,请为电子邮件添加唯一索引。
$table->unique('email');
答案 2 :(得分:0)
您需要创建新的迁移并使用dropUnique()
方法:
Schema::table('users', function (Blueprint $table) {
$table->dropUnique('users_username_unique');
});
然后运行composer du
和php artisan migrate
命令来执行迁移。