续集独特的复合材料失败

Sequelize unique composites fails

我有以下表格:

class Occurrence extends Model {}
Occurrence.init({
  date: {
    type: DataTypes.DATE,
    allowNull: false,
    defaultValue: Sequelize.NOW,
    unique: 'uniqueOccurrence'
  }
}, {
  sequelize,
  modelName: 'Occurrence'
});

class Event extends Model {}
Event.init({
  title: {
    type: DataTypes.STRING,
    allowNull: false,
  },
}, {
  sequelize,
  modelName: 'Event'
});

与以下关联:

Event.hasMany(Occurrence, { onDelete: 'CASCADE', foreignKey: { unique: 'uniqueOccurrence' } });
Occurrence.belongsTo(Event);

我正在尝试有一个复合唯一约束,它基本上只会在 occurrence.dateEvent.id 一起不唯一时才会失败。

更新

复合假设在``occurrence.EventIdnotevent.id`

但是由于某种原因失败了。

如果您希望创建一个包含两个字段的唯一索引,其中一个是外键,您应该明确定义它,以便能够指示与 date 字段中指示的相同的唯一索引名称:

EventId: {
    type: DataTypes.INTEGER,
    allowNull: false,
    unique: 'uniqueOccurrence'
},
date: {
    type: DataTypes.DATE,
    allowNull: false,
    defaultValue: Sequelize.NOW,
    unique: 'uniqueOccurrence'
}

并更正关联:

Event.hasMany(Occurrence, { onDelete: 'CASCADE', foreignKey: 'EventId' });
Occurrence.belongsTo(Event, { foreignKey: 'EventId' });

如果你希望使用两个字段作为外键,那么 Sequelize 不能这样做(并且 foreignKey 选项没有 unique 属性)。