激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - ThinkPHP實現轉換數據庫查詢結果數據到對應類型的方法

ThinkPHP實現轉換數據庫查詢結果數據到對應類型的方法

2021-07-16 17:32Cafeting PHP教程

這篇文章主要介紹了ThinkPHP實現轉換數據庫查詢結果數據到對應類型的方法,涉及thinkPHP模型類操作及針對源碼文件的相關修改方法,需要的朋友可以參考下

本文實例講述了ThinkPHP實現轉換數據庫查詢結果數據到對應類型的方法。分享給大家供大家參考,具體如下:

最近使用 ThinkPHP3.2.3 進行 API 開發,發現 ThinkPHP3.x 查詢數據庫返回所有字段值類型都是 String。以前開發 web 的時候沒怎么注意這個,現在發現用到 API 開發很難辦,數據類型不對,不能每個字段都讓客戶端自己強制轉換一下。

查資料后發現 ThinkPHP3.x 的 Model.class.php,提供了 _parseType 方法,在查詢完以后進行類型轉換,但需要我們手工調一下。

需要自己寫一個 Model 基類:

MBaseModel.class.php 繼承自 Model

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use Think\Model;
class BaseModel extends Model
{
  protected function _after_select(&$resultSet, $options)
  {
    parent::_after_select($resultSet,$options);
    foreach ($resultSet as &$result) {
      $this->_after_find($result, $options);
    }
  }
  protected function _after_find(&$result, $options)
  {
    parent::_after_find($result,$options);
    foreach ($result as $field => $value) {
      $this->_parseType($result, $field);
    }
  }
}

然后所有自己寫的 Model 類都繼承自 MBaseModel.

注意:必須把上面兩個方法寫到 Model 的子類中。

本來,這樣已經搞定了,但發現 Model.class.php 的 _parseType 方法里有個低級 bug:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
* 數據類型檢測
* @access protected
* @param mixed $data 數據
* @param string $key 字段名
* @return void
*/
protected function _parseType(&$data,$key) {
    if(!isset($this->options['bind'][':'.$key]) && isset($this->fields['_type'][$key])){
      $fieldType = strtolower($this->fields['_type'][$key]);
      if(false !== strpos($fieldType,'enum')){
        // 支持ENUM類型優先檢測
      }elseif(false === strpos($fieldType,'bigint') && false !== strpos($fieldType,'int')) {
        $data[$key]  = intval($data[$key]);
      }elseif(false !== strpos($fieldType,'float') || false !== strpos($fieldType,'double')){
        $data[$key]  = floatval($data[$key]);
      }elseif(false !== strpos($fieldType,'bool')){
        $data[$key]  = (bool)$data[$key];
      }
    }
}
// 上面第13行修改為
}elseif(false !== strpos($fieldType,'bigint') || false !== strpos($fieldType,'int') || false !== strpos($fieldType,'tinyint')) {

希望本文所述對大家基于ThinkPHP框架的PHP程序設計有所幫助。

原文鏈接:http://likfe.com/2017/03/25/tp3-x-all-string/

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品自在线拍 | 欧美性黄 | 国产午夜精品久久久久婷 | 99在线免费观看视频 | av电影在线观看免费 | 国产成人在线免费视频 | gril hd| 久久亚洲综合色 | 久久欧美亚洲另类专区91大神 | 国产一区精品在线观看 | h视频免费看 | 羞羞视频入口 | 国产成人高清成人av片在线看 | 成人午夜网址 | 91短视频网址 | 毛片在线免费观看完整版 | 欧美一级淫片免费播放口 | 成人免费精品视频 | 欧美一级毛片免费观看视频 | 久久久电影电视剧免费看 | 密室逃脱第一季免费观看完整在线 | 亚洲5区| 亚洲最大久久 | 成人黄色短视频在线观看 | 亚洲免费看片网站 | 久久一区二区三区av | 国产精品成人亚洲一区二区 | 亚洲欧美在线看 | 日韩视| 成年片黄色日本大片网站视频 | 久久久毛片视频 | 欧美精品38videos性欧美 | 一级免费 | 免费看a级片 | 欧美日本一 | 成人精品久久 | 久久激情免费视频 | 72pao成人国产永久免费视频 | 成人精品久久久 | av最新在线观看 | 欧美一级电影在线观看 |