如果仅提供值,则检查唯一性

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 时,这意味着您的数据库将为该字段创建索引。所以一旦你有空字符串,每个下一个空字符串都会导致错误,因为它不是唯一的。

处理这个问题的捷径是

  1. 删除为您的字段指定 NULL 值的方法。如果数据库中没有 NULL 个值,它实际上很容易工作。
  2. 强制用户输入 emailmobile

如果仍想拥有该自定义逻辑,您需要在 BEFORE INSERT 上定义一个 trigger,它将执行行的自定义验证。