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

                # 模型基類之模型基類的用途 [TOC] >[danger] model的基類的功能相對控制器少一些,但代碼量及重要性不容小視 ## 數據處理在程序開發中最至關重要的 如果我們把所有的數據處理 邏輯處理統統統一在模型類中,那么你的程序核心就是可以說模型 >[info] 除了每張表建立一個物理模型 你也可以建立服務和邏輯層 既然model重要,那我我們把更多的復用的代碼封裝在基類中 增加開發速度 同時高質量的基類代碼 也可以減少bug的出現概率 ## 模型事件功能在model里的使用 舉一個實例: Model事件實戰應用—數據庫操作日志 http://www.hmoore.net/mikkle/thinkphp5_study/347954 這只是一個最簡單的模型事件操作,后面的課程中還會介紹自動更新緩存的功能 ## 模型基類的建立 * 在base模塊下 建立一個model 文件夾 * 在文件夾下新建文件Base.php * 在文件中設置為抽象類 abstract (推薦) 并繼承TP5 Model類 ~~~ /** * Created by PhpStorm. * Power by Mikkle * QQ:776329498 * Date: 2017/4/14 * Time: 16:23 */ namespace app\base\model; use think\Model; abstract class Base extends Model { } ~~~ 這樣 Model 的基類就建立完成了 ## 基類也是可以分成的 >[info] 比如說使用樂觀鎖的基類可以作為一個獨立的二級基類 > 這個基類BaseLeGuan繼承Base類 那這個基類封裝的代碼就更豐富了 > 對數據敏感的數據物理模型繼承 BaseLeGuan 即可使用所有相關樂觀鎖的基類代碼了 ~~~ <?php /** * Created by PhpStorm. * Power By Mikkle * Email:776329498@qq.com * Date: 2017/4/19 * Time: 9:24 */ namespace app\base\model; use think\Db; use think\Debug; use think\Error; use think\Exception; use think\Log; use think\Session; abstract class BaseLeGuan extends Base { protected $versionField="edit_version"; /** * 帶有樂觀鎖的修改 * Power: Mikkle * Email:776329498@qq.com * @param $save_data   修改的數據 * @param string $edit_pk 修改的ID字段名稱 * @param string $version_field  樂觀鎖版本號字段名稱 * @return array */ public function editDateWithLock($save_data,$edit_pk="",$version_field=""){ if (empty($version_field)){ $version_field = isset($this->versionField) ? $this->versionField : "edit_version"; } if (empty($edit_pk)){ $edit_pk = isset($this->editPk) ? $this->editPk : $this->getPk(); } //判斷PK字段是否存在 if (!isset($save_data[$edit_pk])||!isset($save_data[$version_field])){ return self::showReturnCodeWithOutData(1003,"參數缺失"); }else{ $map[$edit_pk] = $save_data[$edit_pk]; $map[$version_field] = $save_data[$version_field]; //剔除PK unset($save_data[$edit_pk]); } try{ //檢測版本字段 if($this->hasColumn($version_field)){ throw new Exception("樂觀鎖版本字段[$version_field]不存在"); } $original_data = $this->where($map)->find(); if (empty($original_data)){ throw new Exception("此條信息已經變動了,請重新操作!"); } foreach ($save_data as $item=>$value){ if (isset($original_data[$item])){ //修改的數值不變時候 剔除 if ($original_data[$item]==$value){ unset( $save_data[$item]); }elseif($item!=$version_field){ unset( $original_data[$item]); } }else{ //修改的字段不存在 剔除 unset( $save_data[$item]); } } if(empty($save_data)){ throw new Exception("修改的數值無變化"); } //版本號升級 $save_data[$version_field]=(int)$original_data[$version_field]+1; if (1!=$this->allowField(true)->save($save_data,$map)){ throw new Exception("修改信息出錯:".$this->getError()); } //記錄修改日志 $this->saveEditLog($original_data,$save_data); return self::showReturnCodeWithOutData(1001); }catch (Exception $e){ $msg=$e->getMessage(); return self::showReturnCodeWithOutData(1003,$msg); } } /** * 保存修改信息 * Power: Mikkle * Email:776329498@qq.com * @param $original_data * @param $save_data * @return bool */ protected function saveEditLog($original_data,$save_data){ if (empty($original_data)&&empty($save_data)){ $this->error="保存的修改信息不存在"; return false; } $log_data=[ "uuid"=>Session::get('uuid', 'Global'), "model_data"=>$this->name, "original_data"=>$original_data, "save_data"=>$save_data, "update_time"=>time(), ]; try{ Db::table("update_log")->insert($log_data); return true; }catch (Exception $e){ $log_data["error"]="保存修改信息出錯"; Log::write(json_encode($log_data),"error"); return false; } } } ~~~
                  <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>

                              哎呀哎呀视频在线观看