Sequelize中具有另一个属性范围的唯一属性

时间:2015-03-21 22:41:22

标签: node.js sequelize.js

是否可以在Sequelize模型上创建一个仅强制在另一个属性范围内的唯一性的属性?

例如,让我们说foo必须是唯一的:

Thing.create({ foo: 1, bar: 1 });
Thing.create({ foo: 1, bar: 1 }); // Uniqueness violation!

但我希望允许以下内容:

Thing.create({ foo: 1, bar: 1 });
Thing.create({ foo: 1, bar: 2 }); // Allowed since bar is a different value

1 个答案:

答案 0 :(得分:1)

这可以通过compositeIndex完成。

定义模型时,传递给unique验证的值可以是字符串。如果您提供的字符串与另一个属性上的另一个唯一验证值匹配,则这些属性将创建一个复合索引,该索引将强制实现这些值组合的唯一性。

来自Sequelize docs

var Foo = sequelize.define('Foo', {

  someUnique: {type: Sequelize.STRING, unique: true},
  uniqueOne: { type: Sequelize.STRING,  unique: 'uniqueCombo'},
  uniqueTwo: { type: Sequelize.INTEGER, unique: 'uniqueCombo'}

});