【问题标题】:How to correctly remove 'unique' column attribute in users table column in Laravel 5.3?如何正确删除 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(),然后删除这些更改 - 然后我将来可能能够再次使用迁移。

标签: php mysql laravel laravel-5.3


【解决方案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 duphp artisan migrate命令执行迁移。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-31
      • 1970-01-01
      • 1970-01-01
      • 2011-07-26
      • 2022-08-14
      • 2018-09-23
      • 1970-01-01
      相关资源
      最近更新 更多