钩子(hooks)支持在执行查询的特定时机插入根据上下文所做的特殊操作,本文将介绍 Leoric 支持的钩子函数以及如何使用它们
可通过以下方式声明:
// class syntax
class User extends Bone {
static beforeCreate() {}
static afterUpdate() {}
});
// define
Realm.define('User', attrs, {
hooks: {
beforeCreate() {},
afterUpdate() {},
}
});
其中
Model.method
表示直接通过模型类调用方法,instance.method
表示通过模型实例调用方法,针对不同的调用方式其 hook 的入参和都略有不同
create
支持以下几个钩子函数:
// create hooks,其中 args 为函数本身调用时的参数
Model.beforeCreate(args) // 函数上下文为将要创建的实例
Model.afterCreate(instance, createResult)
instance.beforeCreate(args)
instance.afterCreate(instance, createResult) // 函数上下文为将要创建的实例
需要注意的是,create
的钩子函数的函数上下文 context
皆为将要创建的实例
bulkCreate
支持以下两个钩子函数,其函数上下文为模型类:
// bulkCreate hooks
Model.beforeBulkCreate(records, queryOptions) // 函数上下文为 Model
Model.afterBulkCreate(instances, Model) // instances 为批量创建的实例
update
支持以下几个钩子函数:
// update hooks
Model.beforeUpdate(args) // 函数上下文为 Model
Model.afterUpdate(updateResult, Model) // 函数上下文为 Model
instance.beforeUpdate(args) // 函数上下文为 instance
instance.afterUpdate(instance, updateResult) // 函数上下文为 instance, updateResult 为 `update` 函数的更新结果。
save
支持以下两个钩子函数:
Instance.beforeSave(options)
Instance.afterSave(instance, options)
需要注意的是, save
属于保存操作,模型实例调用 save
时会根据实际情况再触发 create
、 update
或 upsert
的钩子函数。
create
的钩子函数upsert
的钩子函数被触发upsert
的钩子函数upsert
支持以下两个钩子函数:
instance.beforeUpsert(opts) // 函数上下文为 instance
instance.bafterUpsert(instance, upsertResult) // upsertResult 为 `upsert` 执行结果。
remove
支持以下四个钩子函数:
Model.beforeRemove(args)
Model.afterRemove(removeResult, Model) // removeResult 为函数执行结果
instance.beforeRemove(args)
instance.afterRemove(instance, removeResult)
// create hooks,其中 args 为函数本身调用时的参数
Model.beforeCreate(args) // 函数上下文为将要创建的实例
Model.afterCreate(instance, createResult)
instance.beforeCreate(args)
instance.afterCreate(instance, createResult) // 函数上下文为将要创建的实例
// bulkCreate hooks
Model.beforeBulkCreate(records, queryOptions) // 函数上下文为 Model
Model.afterBulkCreate(instances, Model) // instances 为批量创建的实例
// update hooks
Model.beforeUpdate(args) // 函数上下文为 Model
Model.afterUpdate(updateResult, Model) // 函数上下文为 Model
instance.beforeUpdate(args) // 函数上下文为 instance
instance.afterUpdate(instance, updateResult) // 函数上下文为 instance
// save hooks
instance.beforeSave(options)
instance.afterSave(instance, options)
// upsert hooks
instance.beforeUpsert(opts) // 函数上下文为 instance
instance.bafterUpsert(instance, upsertResult)
// remove hooks
Model.beforeRemove(args)
Model.afterRemove(removeResult, Model)
instance.beforeRemove(args)
instance.afterRemove(instance, removeResult)