【发布时间】:2021-04-04 13:41:05
【问题描述】:
我有一张表,它对字段 + 偏执具有唯一约束。 在下面的示例中,品牌名称是唯一值
class Brand extends Model {
static init(sequelize) {
return super.init(
{
BrandID: {
field: "brand_id",
type: DataTypes.INTEGER(11),
allowNull: false,
primaryKey: true,
autoIncrement: true
},
BrandName: {
field: "brand_name",
type: DataTypes.STRING(40),
allowNull: false,
unique: true
}
},
{
sequelize,
tableName: "brands",
timestamps: true,
paranoid: true
}
);
}
static associate(models) {
}
};
问题是,一旦删除了一个实体,由于唯一性约束,我无法添加另一个具有相同品牌名称的实体,尽管它按预期标记为已删除。
我想将字段定义为模型的一部分,即添加:
DeletedAt: {
field: "deleted_at",
type: DataTypes.DATE,
allowNull: false,
defaultValue: 0
}
并且对品牌名称 + deleted_at 有一个复合唯一约束,但它失败了。
Sequelize 必须为此提供内置解决方案... 有什么想法???
【问题讨论】:
-
当您尝试
brand name + deleted_at唯一约束时究竟是什么失败了? -
我重新考虑了它并手动更改\重新定义 deleteAt 字段是一个坏主意,因为 Sequelize 在获取对象时依赖该字段为空。所以我尝试定义一个像这样的复合联合约束:``` uniqueKeys: { name_unique: { fields: ['brand_name', 'deletedAt'] } } `` 但显然,具有空字段的唯一约束不起作用,因为可以插入同名的重复记录和空的deletedAt。
-
它有效吗?
-
不,正如我提到的,可以插入多个具有相同品牌名称的行。
-
您是否在 DB 中创建了这个唯一索引?
标签: node.js sequelize.js unique-constraint