【问题标题】:sequelize beforeCreate hook not calledsequelize beforeCreate 挂钩未调用
【发布时间】:2016-03-29 09:57:18
【问题描述】:

我使用直接方法(续集文档中的方法 3)定义我的 beforeCreate 钩子,如下所示:

module.exports = (sequelize, datatypes)=>{
    var tag = sequelize.define(...)

    tag.beforeCreate(tag,options=>{...})

    tag.beforeBulkCreate(tags,options=>{...})
}

beforeBulkCreate 在我执行 tag.bulkCreate 时被触发,但 beforeCreate 不是在我执行 tag.create 时。这是为什么呢?

【问题讨论】:

    标签: sequelize.js


    【解决方案1】:

    如果你想为每一行运行创建钩子http://docs.sequelizejs.com/en/latest/api/model/#bulkcreaterecords-options-promisearrayinstance,你应该使用individualHooks: true

    【讨论】:

    • 有没有办法在模型选项中打开 individualHooks?从 API 的角度来看,bulkCreate 的调用者知道他们必须传递选项似乎不直观。
    【解决方案2】:

    我觉得在定义我的模型时默认 individualHooks 为 true 很重要,而不是假设所有 bulkCreate 的调用者都知道传递 {individualHooks: true}。第一个响应是正确的,但我认为最好控制在模型定义中如何使用钩子,而不是让调用者负责。

    这就是我在模型定义中所做的。

    var baseBulkCreate = User.bulkCreate;
    User.bulkCreate = function(instances, options) {
        options = options || {};
    
        // We want to make sure that when we do things in bulk we always run the individual hooks too.  It isn't clear
        // why this isn't the default.
        options.individualHooks = true;
    
        return baseBulkCreate.call(this, instances, options);
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-29
      • 1970-01-01
      • 2017-03-07
      • 2013-11-01
      相关资源
      最近更新 更多