ホームページ >バックエンド開発 >PHPチュートリアル >ThinkPHP は、データベース クエリ結果データの対応する型への変換を実装します。

ThinkPHP は、データベース クエリ結果データの対応する型への変換を実装します。

不言
不言オリジナル
2018-06-07 16:59:222419ブラウズ

この記事では、主に、thinkPHP モデル クラスの操作と、ソース コード ファイルの関連する変更方法を含む、データベース クエリの結果データを対応する型に変換する ThinkPHP の方法を紹介します。必要な方は、この記事の例を参照してください。

データベースのクエリ結果データを対応する型に変換する ThinkPHP の方法について説明します。参考までに皆さんと共有してください。詳細は次のとおりです。

最近、API 開発に ThinkPHP3.2.3 を使用しましたが、データベースのクエリ時に 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 から継承します。

注: 上記 2 つのメソッドは Model のサブクラスに書き込む必要があります。

もともとこれは行われていましたが、Model.class.php の _parseType メソッドに低レベルのバグが見つかりました:

/**
* 数据类型检测
* @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')) {

以上がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。

関連する推奨事項:

thinkPHP データベースの追加、削除、変更、およびクエリ操作

thinkPHP5 でコンテンツをデータベースに追加する方法データベース

thinkphp3.2.3バージョンのデータベースの追加、削除、変更、クエリ実装コード

##

以上がThinkPHP は、データベース クエリ結果データの対応する型への変換を実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。