自定义数据类型未获得记录创建的分配值

Custom data type not getting assigned values for record creation

我通过扩展 Abstract 编写了一个自定义数据类型,就像下面为 link 列出的示例:https://sequelize.org/v5/manual/data-types.html。在我尝试保存外键之前,一切似乎都正常,在这种情况下,它会继续生成一个新的 UUID,而不是将对象中的外键传递给创建方法。

在这种情况下我应该如何容纳外键?我应该重载哪个方法调用来处理需要传入值的 getter 情况?

下面的代码概述了我正在使用的扩展 class

class BinToUUID extends ABSTRACT {
        toString(options) {
            return this.toSql(options);
        }

        toSql() {
            return 'BINARY(16)';
        }

        validate(value) {
            console.log(value);
        }

        _stringify(value, options) {
            return `UUID_TO_BIN(${options.escape(value)})`;
        }

        _bindParam(value, options) {
            return `UUID_TO_BIN('${options.escape(value)}')`;
        }

        parse(value) {
            return uuidv1.parse(value);
        }
        
        _sanitize(value) {
            if (value instanceof Buffer) {
                const str = value.toString('hex');

                return [
                    str.slice(0, 8),
                    str.slice(8, 12),
                    str.slice(12, 16),
                    str.slice(16, 20),
                    str.slice(20, 32),
                ].join('-');
            } else {
                const uuid = uuidv1();
                return uuid;
            }

            return value;
        }
    }

这是我在其中使用的模型示例:

sequelize.define("room", {
    roomId: {
        primaryKey: true,
        allowNull: false,
        type: Sequelize.BinToUUID,
        defaultValue: Sequelize.BinToUUID,
        validate: {
            notNull: true
        }
    },
    name: {
        type: DataTypes.STRING(10)
    },
    userId: {
        type: Sequelize.BinToUUID,
        references: {
            model: 'user',
            key: 'userId',
        }
    },
    groupId: {
        type: Sequelize.BinToUUID,
        references: {
            model: 'group',
            key: 'groupId',
        }
    },
    createdAt: {
        type: DataTypes.DATE
    },
    updatedAt: {
        type: DataTypes.DATE
    }
}, {
    freezeTableName: true
});

以下是 table 的关联:

db.Room.User = db.Room.hasOne(db.User, {
    foreignKey: ‘roomId'
});
db.Room.Group = db.Room.hasOne(db.Group, {
    foreignKey: ‘groupId'
});

这是保存房间时调用的创建方法:

Room.create(room, {
        include: [{
            association: Room.User
        }, {
            association: Room.Group
        }]
});

我只是想将外键保存到此 table。当我查看用户和组的数据库 tables 时,这些值与 uuid 主键值不匹配。似乎 BinToUUID 数据类型正在覆盖传递给创建方法的 UUID。

对于一对一(primary/foreign 键关系),查看 belongsTo / HasOne 关联

属于
https://sequelize.org/v5/class/lib/model.js~Model.html#static-method-belongsTo 其中有以下示例:

Profile.belongsTo(User) // This will add userId to the profile table

有一个
https://sequelize.org/v5/class/lib/associations/has-one.js~HasOne.html:

This is almost the same as belongsTo with one exception - The foreign key will be defined on the target model.

有关示例,请参阅本教程:https://sequelize.org/v4/manual/tutorial/associations.html

这篇(非官方的?)文章展示了如何处理外键:https://medium.com/@edtimmer/sequelize-associations-basics-bde90c0deeaa