<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 全自動事務 * * * * * **簡介** 在 數據 > 事務控制 章節咱們講解了 如何通過閉包控制事務,但是實際項目開發中存在一些問題就是咱們必須提前將需要處理事務的代碼刻意封裝在閉包中且對于復雜的業務流程中多處驗證返回上會不是很便利,若一套較為復雜的業務邏輯(比如多個分散的類或文件中都進行了需要數據操作)這種情況可能導致循環執行事務也可能導致沒有循環但是執行了多次事務(實際上還是無法有效的保證數據完整性)。 下面咱們再來分享一種事務控制的方式 ``` /** * 自動封裝事務 */ function trans($parameter = [], $callback = null) { try { Db::startTrans(); $backtrace = debug_backtrace(false, 2); array_shift($backtrace); $class = $backtrace[0]['class']; $result = (new $class())->$callback($parameter); Db::commit(); return $result; } catch (Exception $ex) { Db::rollback(); throw new Exception($ex->getMessage()); } } ``` 這個函數用于將頂層的方法自動嵌套到事務處理中。 **使用方式** 控制器中: ``` // 測試事務 public function tranEvent() { return trans($this->param, 'tranTest'); } // 事務處理入口 public function tranTest($param = []) { dump($this->logicIndex->test($param)); } ``` 業務邏輯中: ``` /** * 測試操作 */ public function test($data = []) { $this->modelArticle->setInfo(['name' => '666'], ['id' => 23]); 1/0; //... 比如這里有多長很長的業務邏輯處理 //... 比如這里還執行了某文件里面的數據庫操作 //... 比如這里執行了數據驗證 比如 積分不足? 余額不足? 等操作 return [RESULT_SUCCESS, '操作成功']; } ``` **解決的問題** 1.面向切面的事務控制,若初期開發中業務邏輯層沒有考慮到事務控制,那么后面想加入事務機制只需要在控制器中加一個類似于事件的方法中轉即可,業務層的代碼基本上不需要改動。 2.避免了業務流程復雜時 循環執行事務及多個事務分散在各處無法保證多個事務都OK的情況。 3.清爽的代碼將控制器中四處可見的 try catch 消滅掉。 4.有效提升了開發效率,開發者在編寫業務邏輯時無需考慮數據完整性問題。 5.有效控制事務的同時也與OneBase目前返回跳轉及提示機制完美兼容,不知不覺已經在所有的代碼上自動加上了事務控制。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看