【问题标题】:How to extend Sequelize model如何扩展 Sequelize 模型
【发布时间】:2013-11-10 00:31:20
【问题描述】:

有没有办法扩展(可能继承)模型以在定义模型后添加钩子和字段?

所以是这样的:

User = sequelize.define("user", {
   name: sequelize.String
});

makeStateful(User); // adds state,updated,added fields and some hooks

【问题讨论】:

    标签: javascript node.js sequelize.js


    【解决方案1】:

    目前这是不可能的。但是你可以很容易地让它工作相反:定义你的 mixin 并在你定义模型时使用它:

    var Sequelize = require('sequelize')
      , sequelize = new Sequelize('sequelize_test', 'root')
    
    var mixin = {
      attributes: {
        state: Sequelize.STRING,
        added_at: Sequelize.DATE
      },
      options: {
        hooks: {
          beforeValidate: function(instance, cb) {
            console.log('Validating!!!')
            cb()
          }
        }
      }
    }
    
    var User = sequelize.define(
      'Model'
    , Sequelize.Utils._.extend({
        username: Sequelize.STRING
      }, mixin.attributes)
    , Sequelize.Utils._.extend({
        instanceMethods: {
          foo: function() {
            return this.username
          }
        }
      }, mixin.options)
    )
    
    User.sync({ force: true }).success(function() {
      User.create({ username: 'foo' }).success(function(u) {
        console.log(u.foo()) // 'foo'
      })
    })
    

    【讨论】:

    • 还是不行吗?
    猜你喜欢
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 2011-01-11
    • 2014-12-19
    • 2017-02-26
    • 2021-01-16
    相关资源
    最近更新 更多