이 글에서는 데이터베이스 쿼리 결과 데이터를 해당 유형으로 변환하는 ThinkPHP의 방법을 주로 소개합니다. ThinkPHP 모델 클래스 연산과 관련 소스 코드 파일 수정 방법이 필요한 친구들이 참고할 수 있습니다
이 글에서는 ThinkPHP의 구현 예를 설명합니다. 결과 데이터를 쿼리하는 데이터베이스 메소드를 해당 유형으로 변환합니다. 참고하실 수 있도록 자세한 내용을 공유합니다.
최근 API 개발에 ThinkPHP3.2.3을 사용했는데 데이터베이스 쿼리 시 ThinkPHP3.x에서 반환하는 모든 필드 값 유형이 문자열이라는 것을 확인했습니다. 예전에 웹을 개발할 때는 이 부분에 크게 신경을 쓰지 않았는데, 이제는 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 메소드에서 저수준 버그를 발견했습니다.
/** * 数据类型检测 * @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 중국어 웹사이트에 주목하세요!
관련 권장 사항:
thinkPHP 데이터베이스 추가, 삭제, 수정 및 작업 확인
thinkPHP5 데이터베이스에 콘텐츠를 추가하는 방법
thinkphp3.2.3 버전 데이터베이스 추가, 삭제, 수정, 구현 확인 코드
위 내용은 ThinkPHP는 데이터베이스 쿼리 결과 데이터를 해당 유형으로 변환하는 기능을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!