如果仅提供值,则检查唯一性
check for unique if only value is provided sequelize
我有一个用户 table,其中包含几列,包括手机号码和电子邮件地址列。
我想将手机和电子邮件列都设置为 unique
。
我一直在完美地工作,直到一些用户不愿提供电子邮件地址。
当电子邮件列为空时,它会显示唯一键错误消息。
有没有什么办法可以让一个列只有在sequelize中为列提供值时才唯一?
这是我的用户模式的一段代码:
const schema = sequelize.define("users", {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: {
type: DataTypes.STRING,
},
email: {
type: DataTypes.STRING,
unique: {
msg: "Email address is already registered"
},
},
mobile: {
type: DataTypes.STRING,
unique: {
msg: "Mobile number is already registered"
},
},
});
按照您的实施方式,这是不可能的。您需要了解,当您编写 unique
时,这意味着您的数据库将为该字段创建索引。所以一旦你有空字符串,每个下一个空字符串都会导致错误,因为它不是唯一的。
处理这个问题的捷径是
- 删除为您的字段指定
NULL
值的方法。如果数据库中没有 NULL
个值,它实际上很容易工作。
- 强制用户输入
email
和 mobile
如果仍想拥有该自定义逻辑,您需要在 BEFORE INSERT
上定义一个 trigger
,它将执行行的自定义验证。
我有一个用户 table,其中包含几列,包括手机号码和电子邮件地址列。
我想将手机和电子邮件列都设置为 unique
。
我一直在完美地工作,直到一些用户不愿提供电子邮件地址。
当电子邮件列为空时,它会显示唯一键错误消息。
有没有什么办法可以让一个列只有在sequelize中为列提供值时才唯一?
这是我的用户模式的一段代码:
const schema = sequelize.define("users", {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: {
type: DataTypes.STRING,
},
email: {
type: DataTypes.STRING,
unique: {
msg: "Email address is already registered"
},
},
mobile: {
type: DataTypes.STRING,
unique: {
msg: "Mobile number is already registered"
},
},
});
按照您的实施方式,这是不可能的。您需要了解,当您编写 unique
时,这意味着您的数据库将为该字段创建索引。所以一旦你有空字符串,每个下一个空字符串都会导致错误,因为它不是唯一的。
处理这个问题的捷径是
- 删除为您的字段指定
NULL
值的方法。如果数据库中没有NULL
个值,它实际上很容易工作。 - 强制用户输入
email
和mobile
如果仍想拥有该自定义逻辑,您需要在 BEFORE INSERT
上定义一个 trigger
,它将执行行的自定义验证。