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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 模型架構 * * * * * 在看模型架構之前,需要將 ModelBase 類中的代碼仔細閱讀一遍,代碼如下 ~~~ <?php // +---------------------------------------------------------------------+ // | OneBase | [ WE CAN DO IT JUST THINK ] | // +---------------------------------------------------------------------+ // | Licensed | http://www.apache.org/licenses/LICENSE-2.0 ) | // +---------------------------------------------------------------------+ // | Author | Bigotry <3162875@qq.com> | // +---------------------------------------------------------------------+ // | Repository | https://gitee.com/Bigotry/OneBase | // +---------------------------------------------------------------------+ namespace app\common\model; use think\Model; use think\Db; /** * 模型基類 */ class ModelBase extends Model { // 查詢對象 private static $ob_query = null; /** * 狀態獲取器 */ public function getStatusTextAttr() { $status = [DATA_DELETE => '刪除', DATA_DISABLE => '禁用', DATA_NORMAL => '啟用']; return $status[$this->data[DATA_STATUS_NAME]]; } /** * 設置數據 */ final protected function setInfo($data = [], $where = [], $sequence = null) { $pk = $this->getPk(); $return_data = null; if (empty($data[$pk])) { $return_data = $this->allowField(true)->save($data, $where, $sequence); } else { is_object($data) && $data = $data->toArray(); !empty($data[TIME_CT_NAME]) && is_string($data[TIME_CT_NAME]) && $data[TIME_CT_NAME] = strtotime($data[TIME_CT_NAME]); $default_where[$pk] = $data[$pk]; $return_data = $this->updateInfo(array_merge($default_where, $where), $data); } return $return_data; } /** * 新增數據 */ final protected function addInfo($data = [], $is_return_pk = true) { $data[TIME_CT_NAME] = TIME_NOW; $return_data = $this->insert($data, false, $is_return_pk); return $return_data; } /** * 更新數據 */ final protected function updateInfo($where = [], $data = []) { $data[TIME_UT_NAME] = TIME_NOW; $return_data = $this->allowField(true)->where($where)->update($data); return $return_data; } /** * 統計數據 */ final protected function stat($where = [], $stat_type = 'count', $field = 'id') { return $this->where($where)->$stat_type($field); } /** * 設置數據列表 */ final protected function setList($data_list = [], $replace = false) { $return_data = $this->saveAll($data_list, $replace); return $return_data; } /** * 設置某個字段值 */ final protected function setFieldValue($where = [], $field = '', $value = '') { return $this->updateInfo($where, [$field => $value]); } /** * 刪除數據 */ final protected function deleteInfo($where = [], $is_true = false) { if ($is_true) { $return_data = $this->where($where)->delete(); } else { $return_data = $this->setFieldValue($where, DATA_STATUS_NAME, DATA_DELETE); } return $return_data; } /** * 獲取某個列的數組 */ final protected function getColumn($where = [], $field = '', $key = '') { return Db::name($this->name)->where($where)->column($field, $key); } /** * 獲取某個字段的值 */ final protected function getValue($where = [], $field = '', $default = null, $force = false) { return Db::name($this->name)->where($where)->value($field, $default, $force); } /** * 獲取單條數據 */ final protected function getInfo($where = [], $field = true, $join = null, $data = null) { empty($join) ? self::$ob_query = $this->where($where)->field($field) : self::$ob_query = $this->join($join)->where($where)->field($field); return $this->getResultData(DATA_DISABLE, $data); } /** * 獲取列表數據 */ final protected function getList($where = [], $field = true, $order = '', $paginate = 0, $join = [], $group = '', $limit = null, $data = null) { if(is_string($where)) : return $this->query($where); endif; empty($join) && !isset($where[DATA_STATUS_NAME]) && $where[DATA_STATUS_NAME] = ['neq', DATA_DELETE]; self::$ob_query = $this->where($where)->order($order)->field($field); !empty($join) && self::$ob_query = self::$ob_query->join($join); !empty($group) && self::$ob_query = self::$ob_query->group($group); !empty($limit) && self::$ob_query = self::$ob_query->limit($limit); if (DATA_DISABLE === $paginate) : $paginate = DB_LIST_ROWS; endif; return $this->getResultData($paginate, $data); } /** * 獲取結果數據 */ final protected function getResultData($paginate = 0, $data = null) { $result_data = null; $backtrace = debug_backtrace(false, 2); array_shift($backtrace); $function = $backtrace[0]['function']; if($function == 'getList') { $paginate != false && IS_POST && $paginate = input('list_rows', DB_LIST_ROWS); $result_data = false !== $paginate ? self::$ob_query->paginate($paginate, false, ['query' => request()->param()]) : self::$ob_query->select($data); } else { $result_data = self::$ob_query->find($data); } self::$ob_query->removeOption(); return $result_data; } /** * 原生查詢 */ final protected function query($sql = '') { return Db::query($sql); } /** * 原生執行 */ final protected function execute($sql = '') { return Db::execute($sql); } /** * 重寫獲取器 兼容 模型|邏輯|驗證|服務 層實例獲取 */ public function __get($name) { $layer = $this->getLayerPrefix($name); if(false === $layer) : return parent::__get($name); endif; $model = sr($name, $layer); return LAYER_VALIDATE_NAME == $layer ? validate($model) : model($model, $layer); } /** * 獲取層前綴 */ public function getLayerPrefix($name) { $layer = false; $layer_array = [LAYER_MODEL_NAME, LAYER_LOGIC_NAME, LAYER_VALIDATE_NAME, LAYER_SERVICE_NAME]; foreach ($layer_array as $v) { if(str_prefix($name, $v)) : $layer = $v; break; endif; } return $layer; } } ~~~ namespace app\common\model 可以看到 ModelBase 是在common模塊,意味著這個模型是其他模塊的模型都要繼承的。 class ModelBase extends Model 意味著這個類是一個Model的子類,還有一點 其實服務層和邏輯層都間接繼承自ModelBase,因為系統中99%的數據庫操作都需要經過這里。 這個狀態獲取器是TP5的特性,封裝在此處是因為幾乎所有的表中都需要一個數據狀態字段,所以寫在這里以后所有的查詢就會自動將對應的文本顯示出來。 下面都是一些數據操作相關的封裝,$this是指當前引用的數據模型實例,此處封裝的都是在OneBase開發中需要使用到的一些操作,在最后為了滿足其他復雜未知的業務需求又添加了 query方法 與 execute 方法,對接的都是TP5的方法,當然也可以在中間進行一些自己特殊的處理。 若開發者的業務需求中數據庫操作滿足不了的情況下有兩個選擇: 1.使用 query 與 execute 來實現原生sql操作 2.在ModelBase中添加自己封裝的通用數據庫操作 下面的__get方法在依賴注入篇中已經介紹過了,此處就不作介紹。 另外作者建議盡量將系統中的數據庫操作都集中再此處方便后期進行擴展及維護,盡量不要在控制器中直接使用此處的方法。
                  <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>

                              哎呀哎呀视频在线观看