• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    ThinkPHP实现转换数据库查询结果数据到对应类型的方法

    本文实例讲述了ThinkPHP实现转换数据库查询结果数据到对应类型的方法。分享给大家供大家参考,具体如下:

    最近使用 ThinkPHP3.2.3 进行 API 开发,发现 ThinkPHP3.x 查询数据库返回所有字段值类型都是 String。以前开发 web 的时候没怎么注意这个,现在发现用到 API 开发很难办,数据类型不对,不能每个字段都让客户端自己强制转换一下。

    查资料后发现 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 的子类中。

    本来,这样已经搞定了,但发现 Model.class.php 的 _parseType 方法里有个低级 bug:

    /**
    * 数据类型检测
    * @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相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。

    希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • PHP学习笔记(三):数据类型转换与常量介绍
    • PHP中数据类型转换的三种方式
    • 浅析php数据类型转换
    • PHP 第二节 数据类型之转换
    • php学习之数据类型之间的转换介绍
    • php学习之数据类型之间的转换代码
    • 通过实例解析PHP数据类型转换方法
    上一篇:Laravel下生成验证码的类
    下一篇:php表单处理操作
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    ThinkPHP实现转换数据库查询结果数据到对应类型的方法 ThinkPHP,实现,转换,数据库,