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
添加/修改: initialize->buildRules(如果写了)->beforeRules(如果写了Rules)->afterRules(如果写了Rules)->beforeSave->afterSave->afterSaveCommit
删除: initialize->buildRules(如果写了)->beforeRules(如果写了Rules)->afterRules(如果写了Rules)->beforeDelete->afterDelete->afterDeleteCommit
其他用法¶
可以在保存前更新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; } |