钩子
通过 creating、created、updating、saved、deleting、restored 等事件,可以挂接到模型生命周期的各个节点,执行自定义逻辑。
Sutando 模型触发几个事件,允许你挂接到模型生命周期的如下节点: creating, created, updating, updated, saving, saved, deleting, deleted, restoring, restored, trashed, forceDeleting, forceDeleted.
以 -ing 结尾的事件名称在模型的任何更改被持久化之前被调度,而以 -ed 结尾的事件在对模型的更改被持久化之后被调度。
可用的钩子
| 钩子 | 介绍 |
|---|---|
creating, created |
第一次保存新模型时 |
updating, updated |
当修改现有模型并调用 save 方法时 |
saving, saved |
当创建或更新模型时 - 即使模型的属性没有改变 |
deleting, deleted |
删除模型时,包括软删除 |
restoring, restored |
恢复模型时 |
trashed |
软删除后 |
forceDeleteing, forceDeleted |
物理删除后 |
声明钩子
目前有两种方式添加钩子:
class User extends Model {}
User.creating(user => {
//
});
class User {
static booted() {
this.creating(user => {
//
});
this.created(user => {
//
});
}
}
钩子与事务
User.deleted(async (user, { client }) => {
const query = user.related('posts');
if (client) {
query.transacting(client);
}
await query.delete();
});
const trx = await sutando.beginTransaction();
await user.delete({
client: trx
});
await trx.commit();