我使用直接方法(sequelize docs中的方法3)定义我的beforeCreate挂钩,如下所示:
module.exports = (sequelize, datatypes)=>{
var tag = sequelize.define(...)
tag.beforeCreate(tag,options=>{...})
tag.beforeBulkCreate(tags,options=>{...})
}
当我执行tag.bulkCreate时,beforeBulkCreate被触发,但是当我执行tag.create时,却没有使用beforeCreate。那是为什么?
答案 0 :(得分:2)
如果要为每行http://docs.sequelizejs.com/en/latest/api/model/#bulkcreaterecords-options-promisearrayinstance
运行创建挂钩,则应使用individualHooks: true
答案 1 :(得分:0)
我认为在定义我的模型时默认IndividualHooks是正确的,而不是假设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);
};