Sequelize 唯一约束 + 偏执

问题描述

我有一个表,它对字段 + 偏执有唯一约束。 在下面的示例中,品牌名称是唯一值

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),unique: true
                    }
                },{
                    sequelize,tableName: "brands",timestamps: true,paranoid: true
                }
            );
        }

        static associate(models) {

        }

    };

问题是,一旦删除一个实体,由于唯一性约束,我无法添加具有相同品牌名称的另一个实体,尽管它按预期标记为已删除

我想将字段定义为模型的一部分,即添加

                    DeletedAt: {
                        field: "deleted_at",type: DataTypes.DATE,defaultValue: 0
                    }

并且对品牌名称+deleted_at 有一个复合唯一约束,但它失败了。

Sequelize 必须有一个内置的解决方案...... 有什么想法吗???

解决方法

我认为最干净的解决方案,一个 sequelize 的偏执特征被创建来处理,是恢复原始记录。恢复后,您可以更新该记录以满足您的需要。

// Example showing the static `restore` method.
await Brand.restore({ where: { BrandName: someBrandYouNeedAgain } })

https://sequelize.org/master/manual/paranoid.html#restoring