违反UNIQUE KEY约束'UQ__user__xxx'。无法在对象'dbo.user'中插入重复键。重复键值为(<null>)

时间:2017-05-30 07:10:14

标签: php sql-server yii2 sqlsrv

故事:
我正在研究如何在我的Yii2项目中使用SQL Server并成功连接并运行迁移。

问题:
我想将我的yii2项目中的新用户注册到我的数据库,但我从SQL Server收到此错误。

  

违反UNIQUE KEY约束'UQ__user__xxx'。无法在对象'dbo.user'中插入重复键。重复的键值是   (NULL)。

这里是执行查询

INSERT INTO [user]
            ([username],
             [auth_key],
             [password_hash],
             [email],
             [user_type],
             [status],
             [created_at],
             [updated_at])
VALUES      
('andhy', 
 'EIrQRO31WLuDGDPoSIkz_wTWEzjGzIK0',
 '$2y$13$1cWynvtIyDA.7I3nyvKqmuq6KT5XPsNc6LaJ04MrWmiNpqP2.vraS',
 'my.account@gmail.com',
 'backend',
 10,
 1496125394,
 1496125394)

仅限唯一键[id](作为PK),[用户名],[电子邮件],[password_reset_token]

我认为必须在查询中选择[id]字段并将IDENTITY_INSERT设置为ON,但对我来说没有好的解决方案。

请给我解决这个小子的正确方法。感谢

3 个答案:

答案 0 :(得分:0)

将password_reset_token插入为null。

答案 1 :(得分:0)

确保在用户表中为id添加了自动递增的滴答列。 因为它采用相同的值,这是早先为下一次操作存储的id

答案 2 :(得分:0)

如果您仍然遇到这个原因,它适用于 MySQL 而不是 MSSQL,然后在您的用户模型中添加以下几行:

[['username'], 'unique'],
[['email'], 'unique'],

换句话说,从:

public function rules()
    {
        return [
            ['status', 'default', 'value' => self::STATUS_ACTIVE],
            ['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_INACTIVE, self::STATUS_DELETED]],
        ];
    }

到:

public function rules()
    {
        return [
            [['username'], 'unique'],
            [['email'], 'unique'],
            ['status', 'default', 'value' => self::STATUS_ACTIVE],
            ['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_INACTIVE, self::STATUS_DELETED]],
        ];
    }