## 模型事件
模型事件是指在進行模型的查詢和寫入操作的時候觸發的操作行為。
>[danger] 模型事件只在調用模型的方法生效,使用查詢構造器操作是無效的
模型支持如下事件:
|事件|描述|事件方法名|
|---|---|---|
|after_read | 查詢后 |onAfterRead|
|before_insert | 新增前 |onBeforeInsert|
|after_insert | 新增后 |onAfterInsert|
|before_update | 更新前 |onBeforeUpdate|
|after_update| 更新后 |onAfterUpdate|
|before_write| 寫入前 |onBeforeWrite|
|after_write | 寫入后 |onAfterWrite|
|before_delete | 刪除前 |onBeforeDelete|
|after_delete | 刪除后 |onAfterDelete|
|before_restore | 恢復前 |onBeforeRestore|
|after_restore | 恢復后 |onAfterRestore|
注冊的回調方法支持傳入一個參數(當前的模型對象實例),但支持依賴注入的方式增加額外參數。
>[info] 如果`before_write`、`before_insert`、 `before_update` 、`before_delete`事件方法中返回`false`或者拋出`think\exception\ModelEventException`異常的話,則不會繼續執行后續的操作。
## 模型事件定義
最簡單的方式是在模型類里面定義靜態方法來定義模型的相關事件響應。
~~~
<?php
namespace app\model;
use think\Model;
use app\model\Profile;
class User extends Model
{
public static function onBeforeUpdate($user)
{
if ('thinkphp' == $user->name) {
return false;
}
}
public static function onAfterDelete($user)
{
Profile::destroy($user->id);
}
}
~~~
參數是當前的模型對象實例,支持使用依賴注入傳入更多的參數。
如果是在ThinkPHP`6.0+`中使用的話,還可以支持直接通過事件監聽和訂閱。
~~~
Event::listen('app\model\User.BeforeUpdate', function($user) {
//
});
Event::listen('app\model\User.AfterDelete', function($user) {
//
});
~~~
- 簡介
- 數據庫配置
- 分布式數據庫
- 查詢構造器
- 查詢數據
- 新增數據
- 更新數據
- 刪除數據
- 鏈式操作
- Where
- Table
- Alias
- Field
- Strict
- Limit
- Page
- Order
- Group
- Having
- Join
- Union
- Distinct
- Lock
- Cache
- Comment
- FetchSql
- Force
- Partition
- Replace
- FailException
- Extra
- Duplicate
- Sequence
- Procedure
- View
- 聚合查詢
- 分頁查詢
- 時間查詢
- 高級查詢
- 子查詢
- 原生查詢
- 事務操作
- 存儲過程
- 查詢事件
- JSON字段
- 模型
- 定義
- 新增
- 更新
- 刪除
- 查詢
- 查詢范圍
- 只讀字段
- JSON字段
- 自動時間寫入
- 獲取器
- 修改器
- 搜索器
- 類型轉換
- 模型輸出
- 模型事件
- 虛擬模型
- 關聯
- 一對一關聯
- 一對多關聯
- 遠程一對多
- 遠程一對一
- 多對多關聯
- 多態一對多
- 多態一對一
- 關聯預載入
- 關聯統計
- 關聯輸出
- SQL監聽
- 緩存機制
- 字段緩存
- 查詢緩存
- 擴展
- 自定義查詢類
- 自定義數據庫驅動