Skip to content
On this page

钩子

Sutando 模型触发几个事件,允许你挂接到模型生命周期的如下节点: creating, created, updating, updated, saving, saved, deleting, deleted, restoring, restored, trashedforceDeleted.

-ing 结尾的事件名称在模型的任何更改被持久化之前被调度,而以 -ed 结尾的事件在对模型的更改被持久化之后被调度。

可用的钩子

钩子介绍
creating, created第一次保存新模型时
updating, updated当修改现有模型并调用 save 方法时
saving, saved当创建或更新模型时 - 即使模型的属性没有改变
deleting, deleted删除模型时,包括软删除
restoring, restored恢复模型时
trashed软删除后
forceDeleted物理删除后

通过 Sutando 发出批量更新或删除查询时,不会为受影响的模型调度 savedupdateddeletingdeleted 模型事件。 这是因为在执行批量更新或删除时,模型从未真正被检索到。

声明钩子

目前有两种方式添加钩子:

js
class User extends Model {}

User.creating(user => {
  //
});
js
class User {
  static boot() {
    this.creating(user => {
      //
    });

    this.created(user => {
      //
    });
  }
}

钩子与事务

js
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();

Released under the MIT License. (dev)