<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 事務控制 * * * * * ### 閉包事務控制函數 closure_list_exe ~~~ /** * 通過閉包列表控制事務 */ function closure_list_exe($list = []) { Db::startTrans(); try { foreach ($list as $closure) : $closure(); endforeach; Db::commit(); return true; } catch (\Exception $e) { Db::rollback(); throw $e; } } ~~~ 這個函數是作者封裝后處理事務控制的,通過里面的代碼可以看出參數為閉包數組,也就是這一組閉包都處理成功沒有異常則提交,出現異常則回滾。 * * * * * ### 事務控制演示 咱們在測試邏輯中創建事務測試代碼如下: ~~~ /** * 測試事務控制 */ public function testTransaction() { $func1 = function() { model('Member')->setFieldValue(['username' => 'demo'], 'nickname', 'demo_test'); }; $func2 = function() { $a = 1/0; }; closure_list_exe([$func1, $func2]); } ~~~ $func1 閉包對member表中用戶名為demo的記錄進行了一個nickname昵稱的設置,值設置為 demo_test。 $func2 是一個除0異常閉包,是故意制造的一個異常測試咱們的函數是否好用。 咱們目前的數據表記錄如下: ![](https://box.kancloud.cn/3da18138b8a7ca42a47002c3726d35d0_784x146.png) 可以看到目前 nickname 為 demo,下面咱們到控制器中實現測試閉包代碼如下: ~~~ $test = new LogicTest(); $test->testTransaction(); ~~~ 好了,控制器執行效果如圖: ![](https://box.kancloud.cn/fcb4637b3ce5a2224d5817bcfea0d2c5_1884x482.png) 除0異常出來了,那么咱們看看數據庫記錄是否修改成功 ![](https://box.kancloud.cn/3da18138b8a7ca42a47002c3726d35d0_784x146.png) 還是一樣沒有變化,說明咱們的事務控制是OK的。 那么咱們去掉異常部分代碼再試試,代碼如下: ~~~ /** * 測試事務控制 */ public function testTransaction() { $func1 = function() { model('Member')->setFieldValue(['username' => 'demo'], 'nickname', 'demo_test'); }; $func2 = function() { //$a = 1/0; }; closure_list_exe([$func1, $func2]); } ~~~ 這次沒有報錯了,并且數據庫也發生了變化。 ![](https://box.kancloud.cn/c1104bb4d0fed0640cfb8a4c69bde851_812x146.png) 經過上面的測試大家就理解了,OneBase中的closure_list_exe函數是控制事務的,以后研發中有哪些地方需要全部執行成功才進行處理就全封裝成閉包然后往這個函數里面一丟就好咯。
                  <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>

                              哎呀哎呀视频在线观看