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

Unique attribute with scope of another attribute in Sequelize

是否可以在 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

这可以通过 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'}

});