如何正确删除 Laravel 5.3 中用户表列中的“唯一”列属性?
Posted
技术标签:
【中文标题】如何正确删除 Laravel 5.3 中用户表列中的“唯一”列属性?【英文标题】:How to correctly remove 'unique' column attribute in users table column in Laravel 5.3? 【发布时间】:2018-06-04 19:34:49 【问题描述】:早期的教程给我留下了一个设置为唯一的“用户名”列。我想更改它,以便我的唯一用户标识符与电子邮件相关联。
我已经完成了我找到的步骤:
作曲家需要学说/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”时,我得到了
[照亮\数据库\查询异常] SQLSTATE[42000]: 语法错误或访问冲突: 1280 Incorrect index name '' (SQL: alter table users add unique (us ername))
[Doctrine\DBAL\Driver\PDOException] SQLSTATE[42000]: 语法错误或访问冲突: 1280 Incorrect index name ''
[PDO异常] SQLSTATE[42000]: 语法错误或访问冲突: 1280 Incorrect index name ''
从我最初的研究看来,问题出在我的索引上:
users_username_unique
所以我的问题是:
删除该索引然后运行迁移是否安全? 如果这是正确的方法,我的迁移是否需要这样:
$table->dropUnique('users_username_unique');
那么这个命令会自动创建一个正确的、非唯一的索引吗?
$table->string('username')->unique(false)->change();
【问题讨论】:
为什么不通过 mysql 修复它?如果您要再次使用此迁移,则不能在此之后删除unique()
。
我已经考虑过了,因为您是对的,如果不进行一些编辑,我将无法再次使用迁移。但我很确定我可以从初始用户表迁移中删除 ->unique(),然后删除这些更改 - 然后我将来可能能够再次使用迁移。
【参考方案1】:
删除唯一索引并添加普通索引。
$table->dropUnique(['username']);
$table->index('username');
如果需要,为电子邮件添加唯一索引。
$table->unique('email');
Database: Migrations
【讨论】:
谢谢,我相信这就是我要找的。我会尝试这个,然后标记为答案【参考方案2】:对于 dropUnique() 方法,你必须创建一个新的迁移,
Schema::table('users', function (Blueprint $table)
$table->dropUnique('username');
);
或者如果需要,您可以为用户名添加唯一索引。
Schema::table('users', function (Blueprint $table)
$table->unique('username');
);
【讨论】:
【参考方案3】:您需要创建一个新的迁移并使用dropUnique()
方法:
Schema::table('users', function (Blueprint $table)
$table->dropUnique('users_username_unique');
);
然后运行composer du
和php artisan migrate
命令执行迁移。
【讨论】:
以上是关于如何正确删除 Laravel 5.3 中用户表列中的“唯一”列属性?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用请求的情况下删除 Laravel 5.3 中的会话?