【问题标题】:Check if record/model is Unique using sequelize.js使用 sequelize.js 检查记录/模型是否唯一
【发布时间】:2016-10-30 10:42:47
【问题描述】:

我有一个带有标准化数据的 userAttribute 表。我看起来像这样:

UserAttribute = sequelize.define('userAttributes', {
    name: {
        type:       Sequelize.STRING,
        allowNull:  false
    },
    value: {
        type:       Sequelize.STRING,
        allowNull:  false
    },
};

User.hasMany(userAttributes);
userAttributes.belongsTo(User);

某些数据必须是唯一的。例如,如果名称是 email,则该值不能被另一个名称为 email 的记录使用,因为每个用户都必须有一个唯一的电子邮件。

我知道我可以进行模型验证并在数据库中查找它,但这似乎非常低效。我还可以将所有必须唯一的数据放在用户模型中它们自己的列中,但是有什么好的方法可以将数据保存在 userAttributes 表中吗?例如检查整个模型是否唯一。

【问题讨论】:

    标签: node.js sequelize.js


    【解决方案1】:

    您的问题可能有解决方案。

    任意数量的属性

    唯一约束通过数据库模型强制执行。由于您问题中的设置具有无限数量的参数的用户,剩下的唯一选项确实手动检查唯一性。

    特定数量的属性

    如果您想将所有属性保存在表 userAttributes 中,但事先知道一定数量的属性,还有另一种方法可以将 User 连接到多个唯一的 userAttributes。

    为每个属性指定两个模型之间的关系,例如。 g.

    UserAttribute = sequelize.define('userAttributes', {
        name: {
            type:       Sequelize.STRING,
            allowNull:  false
        },
        value: {
            type:       Sequelize.STRING,
            allowNull:  false
        }
    };
    
    User.hasOne(UserAttribute, {
        as : 'email'
    });
    User.hasOne(UserAttribute, {
        as : 'firstName'
    });
    User.hasOne(UserAttribute, {
        as : 'lastName'
    });
    

    然后你可以像这样创建一个用户(更新同样有效):

    User.create({
        email : {
            name : 'email',
            value : 'test@example.com'
        },
        firstName : {
            name : 'firstName',
            value : 'John'
        },
        lastName : {
            name : 'lastName',
            value : 'Doe'
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2013-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-21
      • 2022-01-03
      • 1970-01-01
      • 2011-09-30
      相关资源
      最近更新 更多