Maison > développement back-end > tutoriel php > ThinkPHP implémente la conversion des données de résultat des requêtes de base de données en types correspondants

ThinkPHP implémente la conversion des données de résultat des requêtes de base de données en types correspondants

不言
Libérer: 2023-03-30 14:52:01
original
2416 Les gens l'ont consulté

Cet article présente principalement la méthode ThinkPHP de conversion des données des résultats des requêtes de base de données vers le type correspondant, impliquant les opérations de classe de modèle thinkPHP et les méthodes de modification associées pour les fichiers de code source. Les amis dans le besoin peuvent se référer aux exemples de cet article

Décrit la méthode de ThinkPHP pour convertir les données des résultats des requêtes de base de données vers le type correspondant. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

J'ai récemment utilisé ThinkPHP3.2.3 pour le développement d'API et j'ai découvert que tous les types de valeurs de champ renvoyés par ThinkPHP3.x lors de l'interrogation de la base de données sont des chaînes. Je n'y ai pas prêté beaucoup d'attention lorsque je développais le Web dans le passé, mais maintenant j'ai du mal à développer à l'aide d'API. Le type de données est incorrect et le client ne peut pas forcer la conversion de chaque champ par lui-même.

Après avoir vérifié les informations, j'ai découvert que Model.class.php de ThinkPHP3.x fournit la méthode _parseType pour effectuer la conversion de type après l'interrogation, mais nous devons l'ajuster manuellement.

Vous devez écrire vous-même une classe de base Model :

MBaseModel.class.php hérité de 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);
    }
  }
}
Copier après la connexion

puis Toutes les classes Model auto-écrites héritent de MBaseModel.

Remarque : les deux méthodes ci-dessus doivent être écrites dans la sous-classe de Model.

À l'origine, cela avait été fait, mais j'ai trouvé un bug de bas niveau dans la méthode

_parseType de Model.class.php :

/**
* 数据类型检测
* @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')) {
Copier après la connexion

Ce qui précède est l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !

Recommandations associées :

opérations d'ajout, de suppression, de modification et de requête de base de données thinkPHP

méthode thinkPHP5 pour ajouter du contenu à la base de données

Pensez à l'ajout, à la suppression, à la modification de la base de données de la version php3.2.3 et vérifiez le code d'implémentation

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal