我有一个用户表,其中包含几列,包括手机号码和电子邮件地址列。
我想让 mobile 和 email 列都是 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
如果仍然想要自定义逻辑,您需要在
trigger
上定义一个 BEFORE INSERT
来执行行的自定义验证。
关于mysql - 如果仅提供值,则检查唯一性 sequelize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67482365/