最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ThinkPHP實現(xiàn)轉換數(shù)據(jù)庫查詢結果數(shù)據(jù)到對應類型的方法

 更新時間:2017年11月16日 10:55:14   作者:Cafeting  
這篇文章主要介紹了ThinkPHP實現(xiàn)轉換數(shù)據(jù)庫查詢結果數(shù)據(jù)到對應類型的方法,涉及thinkPHP模型類操作及針對源碼文件的相關修改方法,需要的朋友可以參考下

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

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

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

需要自己寫一個 Model 基類:

MBaseModel.class.php 繼承自 Model

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 的子類中。

本來,這樣已經(jīng)搞定了,但發(fā)現(xiàn) Model.class.php 的 _parseType 方法里有個低級 bug:

/**
* 數(shù)據(jù)類型檢測
* @access protected
* @param mixed $data 數(shù)據(jù)
* @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類型優(yōu)先檢測
      }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相關內容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結》、《ThinkPHP常用方法總結》、《codeigniter入門教程》、《CI(CodeIgniter)框架進階教程》、《Zend FrameWork框架入門教程》及《PHP模板技術總結》。

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

相關文章

最新評論

莱芜市| 兴业县| 阳春市| 丰顺县| 新郑市| 西昌市| 喀喇| 南京市| 黎城县| 乌兰浩特市| 彰化县| 太仆寺旗| 泗水县| 长宁区| 苍山县| 青田县| 湘潭市| 衢州市| 五指山市| 酒泉市| 永安市| 辛集市| 交口县| 罗城| 五台县| 涟水县| 涡阳县| 离岛区| 华宁县| 铜鼓县| 延川县| 德安县| 罗城| 靖安县| 博湖县| 原阳县| 乌恰县| 阜平县| 克山县| 聂拉木县| 阳高县|