如何正确删除 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 duphp artisan migrate命令执行迁移。

【讨论】:

以上是关于如何正确删除 Laravel 5.3 中用户表列中的“唯一”列属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用请求的情况下删除 Laravel 5.3 中的会话?

在 laravel 5.3 中删除哈希进程

使用 AJAX 在 Laravel 5.3 中删除记录

Laravel 5.2 或 5.3:如何正确实施检查会话是不是已登录

如何在 laravel 5.3 中解码 base64

如何使用 Laravel 迁移从列中删除唯一约束?