故事:
我正在研究如何在我的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,但对我来说没有好的解决方案。
请给我解决这个小子的正确方法。感谢
答案 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]],
];
}