2016-01-04 83 views
2

我想通過繼承現有的DataType.Integer的所有默認行爲來定義Sequelize中的自定義數據類型。這裏的基本思想是定義一個新類型並覆蓋valueOftoString方法。如何在Sequelize中添加自定義數據類型ORM

Sequelize文檔不包含任何與此主題相關的信息。如果有人能幫助我,這將是非常好的。

回答

1

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如何從DataTypes.NUMBER繼承使用NUMBER.inherits(fn)

那些從ABSTRACT繼承。您可以覆蓋您的繼承數據類型的toString()方法,如https://github.com/sequelize/sequelize/blob/master/lib/data-types.js#L62-L64所示。免責聲明:由於未公開記錄,我不確定這些API有多穩定,並且由於未來可能發生變化而謹慎。

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

相關問題