在Sequelize模型钩子函数中访问其他模型

时间:2015-03-28 04:43:26

标签: node.js sequelize.js

我正在尝试创建一个模型挂钩,在创建主模型时自动创建关联记录。当我的模型文件结构如下时,如何在钩子函数中访问我的其他模型?

/**
 * Main Model
 */
module.exports = function(sequelize, DataTypes) {

  var MainModel = sequelize.define('MainModel', {

    name: {
      type: DataTypes.STRING,
    }

  }, {

    classMethods: {
      associate: function(models) {

        MainModel.hasOne(models.OtherModel, {
          onDelete: 'cascade', hooks: true
        });

      }
    },

    hooks: {

      afterCreate: function(mainModel, next) {
        // ------------------------------------
        // How can I get to OtherModel here?
        // ------------------------------------
      }

    }

  });


  return MainModel;
};

2 个答案:

答案 0 :(得分:27)

您可以通过sequelize.models.OtherModel访问其他模型。

答案 1 :(得分:4)

您可以使用this.associations.OtherModel.target

/**
 * Main Model
 */
module.exports = function(sequelize, DataTypes) {

  var MainModel = sequelize.define('MainModel', {

    name: {
      type: DataTypes.STRING,
    }

  }, {

    classMethods: {
      associate: function(models) {

        MainModel.hasOne(models.OtherModel, {
          onDelete: 'cascade', hooks: true
        });

      }
    },

    hooks: {

      afterCreate: function(mainModel, next) {
        /**
         * Check It!
         */
        this.associations.OtherModel.target.create({ MainModelId: mainModel.id })
        .then(function(otherModel) { return next(null, otherModel); })
        .catch(function(err) { return next(null); });
      }

    }

  });


  return MainModel;
};