钩子
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 进行批量更新或删除查询时,受影响的模型不会触发 saved
、updated
、deleting
和 deleted
等事件。这是因为在执行批量更新或删除操作时,实际上没有检索到这些模型,所以也就不会触发这些事件。
声明钩子
目前有两种方式添加钩子:
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();