我希望通过继承现有Sequelize
的所有默认行为,在DataType.Integer
中定义自定义数据类型。这里的基本想法是定义一个新类型并覆盖valueOf
和toString
方法。
Sequelize文档不包含与此主题相关的任何信息。如果有人可以帮助我,那将是非常好的。
答案 0 :(得分:2)
https://github.com/sequelize/sequelize/blob/master/lib/data-types.js包含续集数据类型。
具体来说,https://github.com/sequelize/sequelize/blob/master/lib/data-types.js#L251-L273显示了DataTypes.INTEGER如何使用NUMBER.inherits(fn)
从DataTypes.NUMBER继承。
那些继承自ABSTRACT。您可以覆盖继承数据类型的toString()
方法,如https://github.com/sequelize/sequelize/blob/master/lib/data-types.js#L62-L64所示。
免责声明:由于未公开记录,我不确定API的稳定程度,并且由于未来可能的变化而会保持谨慎。
答案 1 :(得分:0)
在Sequelize中扩展数据类型:
class DataTypes_IP extends DataTypes.ABSTRACT {
constructor () {
super()
this.key = 'IP'
}
toSql() {
return 'VARBINARY(16)'
}
// Todo
validate (value) {
// const Validator = require('./utils/validator-extras').validator
// if (!Validator.isDate(String(value))) {
// throw new sequelizeErrors.ValidationError(util.format('%j is not a valid date', value))
// }
return true
}
_sanitize (value) {
return new IP(value)
}
_isChanged (value, originalValue) {
if (value === originalValue) return false
if (
value instanceof IP &&
originalValue instanceof IP &&
value.toBuffer().equals(originalValue.toBuffer())
) {
return false
}
return true
}
_stringify (ip) {
return ip.toBuffer()
}
}
扩展数据类型
DataTypes.IP = DataTypes_IP
您可以在github中查看相关问题。 https://github.com/sequelize/sequelize/issues/8533