Skip to content

钩子

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物理删除后

TIP

在使用 Sutando 进行批量更新或删除查询时,受影响的模型不会触发 savedupdateddeletingdeleted 等事件。这是因为在执行批量更新或删除操作时,实际上没有检索到这些模型,所以也就不会触发这些事件。

声明钩子

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

js
class User extends Model {}

User.creating(user => {
  //
});
js
class User {
  static booted() {
    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.