# 混合操作
* * * * *
前面大家只了解到TP5的DB操作與OneBase的DB操作,實際上因為OB的繼承關系及設計在同一個模型對象上可以進行混合操作。
下面來看一下使用場景


圖中可以看到公會添加的功能,前面都是公會信息,但是公會需要與用戶進行關聯并允許登錄后臺,這樣就涉及到 添加會員與添加公會 兩個業務邏輯。
若將兩個業務進行拆分,先到會員管理中添加會員,再到公會管理中添加公會并關聯會員,這樣會對產品體驗上有一定的影響,雖然開發者覺得合理但是對于系統運營者來講他卻需要操作兩遍新增功能,且不在同一個位置,操作起來會比較耽誤時間。
下面問題來了。
從表結構中可以看到 公會表中有個member_id字段,用于保存管理員會員ID。
那我添加公會怎么知道會員ID? 這意味著咱們得先添加會員,但是在OneBase封裝的setInfo方法中并沒有返回主鍵ID。
這里有3個方案,比如 在ModelBase中新增一個通用方法,調整一下setInfo參數或返回值,OneBase封裝方法與TP5方法混合使用。
~~~
/**
* 公會添加
*/
public function conferenceAdd($data = [])
{
if (!$this->validateConference->scene('add')->check($data)) {
return [RESULT_ERROR, $this->validateConference->getError()];
}
$func = function () use ($data) {
$member['nickname'] = $member['username'] = $data['username'];
$member['password'] = data_md5_key($data['password']);
$member['leader_id'] = MEMBER_ID;
$member['is_inside'] = DATA_NORMAL;
$data['member_id'] = $this->modelMember->insertGetId($member);
$data['source_member_id'] = MEMBER_ID;
action_log('新增', '新增會員,username:' . $member['username']);
$this->modelWgConference->setInfo($data) && action_log('新增', '新增公會,conference_name:' . $data['conference_name']);
};
return closure_list_exe([$func]) ? [RESULT_SUCCESS, '操作成功', url('conferenceList')] : [RESULT_ERROR, '公會添加失敗'];
}
~~~
上面的代碼中可以看到setInfo方法的使用,但是仔細觀察會發現insertGetId方法并不在ModelBase類中。
這就是混合操作,OneBase會優先查找自己的方法,若存在則執行,若不存在則會從TP5的Model類中尋找。
所以有了這個特性 當開發者不想新增方法也不想動OneBase的方法時,就可以使用混合操作。^_^
- 序言
- 基礎
- 安裝環境
- 安裝演示
- 規范
- 目錄
- 介紹
- 后臺介紹
- 后臺首頁
- 會員管理
- 系統管理
- 系統設置與配置管理
- 菜單管理
- 系統回收站
- 服務管理
- 插件管理
- 文章管理
- 接口管理
- 優化維護
- SEO管理
- 數據庫
- 文件清理
- 行為日志
- 執行記錄
- 統計分析
- 接口介紹
- 接口文檔
- 錯誤碼設計
- Token介紹
- 前臺介紹
- 架構
- 架構總覽
- 生命周期
- 入口文件
- 模塊設計
- 依賴注入
- 控制器架構
- 邏輯架構
- 驗證架構
- 服務架構
- 模型架構
- 行為架構
- 插件架構
- 配置
- 配置介紹
- 配置加載
- 配置擴展
- 請求
- 請求信息
- 日志
- 后臺行為日志
- 系統執行日志
- 框架日志
- 數據
- 數據庫設計
- 數據字典
- 數據庫操作
- 事務控制
- 混合操作
- 實戰
- 控制器
- 邏輯與驗證
- 視圖與模型
- 插件研發
- 服務研發
- 接口研發
- 雜項
- 數據導入導出
- 二維碼條形碼
- 郵件發送
- 云存儲服務
- 支付服務
- 短信服務
- 微信分享
- 生成海報
- 聊天室
- PJAX
- Demo
- Widget
- 附錄
- 常量參考
- 配置參考
- 函數參考
- 進階
- Redis
- 自動緩存
- 全自動緩存
- 索引
- 數據簽名
- 全自動事務
- 隊列