この記事では、主に、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 サイトの他の関連記事を参照してください。