Table查询的生命周期

文档 Cake\ORM\Table中可以在查询的生命周期绑定一些事件,具体有以下生命周期:

  • Model.initialize 初始化
  • Model.beforeMarshal 请求数据转换为实体之前会触发该事件
  • Model.beforeFind 每次查找操作之前都会触发该事件
  • Model.buildValidator 创建验证器时
  • Model.buildRules 在创建规则实例和buildRules()调用表的方法之后
  • Model.beforeRules 在实体应用规则之前触发该事件
  • Model.afterRules 在实体应用规则后触发该事件
  • Model.beforeSave 保存每个实体之前会触发该事件
  • Model.afterSave 保存实体后会触发该事件
  • Model.afterSaveCommit 提交保存了包装操作的事务后,将触发该事件
  • Model.beforeDelete 在删除实体之前会触发该事件
  • Model.afterDelete 删除实体后会触发该事件
  • Model.afterDeleteCommit 提交删除操作所在的事务后,将触发该事件

以生命周期中,返回值为true时会继续,false会结束

流程

查询: initialize->beforeFind

restful api

添加/修改: initialize->buildRules(如果写了)->beforeRules(如果写了Rules)->afterRules(如果写了Rules)->beforeSave->afterSave->afterSaveCommit

restful api

删除: initialize->buildRules(如果写了)->beforeRules(如果写了Rules)->afterRules(如果写了Rules)->beforeDelete->afterDelete->afterDeleteCommit

restful api

其他用法

可以在保存前更新createdBy等信息

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
// Cake\ORM\Table UsersTable.php

public function beforeSave($event, $entity, $options)
{
    // 从session中获取的id
    $sessionUserID = AppController::$sessionUserID;
    if (empty($entity->id)) {
        $entity->created_by = $sessionUserID;
        $entity->created_time = time();
    }
    $entity->modified_by = $sessionUserID;
    $entity->modified_time = time();
    return true;
}