ThinkPHP는 데이터베이스 쿼리 결과 데이터를 해당 유형으로 변환하는 기능을 구현합니다.

不言
풀어 주다: 2023-03-30 14:52:01
원래의
2348명이 탐색했습니다.

이 글에서는 데이터베이스 쿼리 결과 데이터를 해당 유형으로 변환하는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!