Heim > Backend-Entwicklung > PHP-Tutorial > ThinkPHP implementiert die Konvertierung von Datenbankabfrage-Ergebnisdaten in entsprechende Typen

ThinkPHP implementiert die Konvertierung von Datenbankabfrage-Ergebnisdaten in entsprechende Typen

不言
Freigeben: 2023-03-30 14:52:01
Original
2418 Leute haben es durchsucht

In diesem Artikel wird hauptsächlich die Methode von ThinkPHP zum Konvertieren von Datenbankabfrageergebnisdaten in den entsprechenden Typ vorgestellt, einschließlich ThinkPHP-Modellklassenoperationen und zugehöriger Änderungsmethoden für Quellcodedateien. Freunde in Not können sich auf die Beispiele dieses Artikels beziehen

Beschreibt die Methode von ThinkPHP zum Konvertieren von Datenbankabfrage-Ergebnisdaten in den entsprechenden Typ. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Ich habe kürzlich ThinkPHP3.2.3 für die API-Entwicklung verwendet und festgestellt, dass alle von ThinkPHP3.x beim Abfragen der Datenbank zurückgegebenen Feldwerttypen String sind. Ich habe dem bei der Entwicklung des Webs in der Vergangenheit nicht viel Aufmerksamkeit geschenkt, aber jetzt fällt es mir schwer, mithilfe von APIs zu entwickeln. Der Datentyp ist falsch und der Client kann die Konvertierung jedes Felds nicht selbst erzwingen.

Nachdem ich die Informationen überprüft hatte, stellte ich fest, dass Model.class.php von ThinkPHP3.x die _parseType-Methode bereitstellt, um nach der Abfrage eine Typkonvertierung durchzuführen, wir müssen sie jedoch manuell anpassen.

Sie müssen selbst eine Model-Basisklasse schreiben:

MBaseModel.class.php erbt von 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);
    }
  }
}
Nach dem Login kopieren

und dann alle selbst Die geschriebenen Model-Klassen erben alle von MBaseModel.

Hinweis: Die beiden oben genannten Methoden müssen in die Unterklasse von Model geschrieben werden.

Ursprünglich wurde dies getan, aber ich habe einen Low-Level-Fehler in der Methode _parseType von Model.class.php gefunden:

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

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

thinkPHP-Datenbank-Hinzufügungs-, Lösch-, Änderungs- und Abfragevorgänge

thinkPHP5-Methode zum Hinzufügen von Inhalten zur Datenbank

Thinkphp3.2.3 Version Datenbank hinzufügen, löschen, ändern und Implementierungscode überprüfen

Das obige ist der detaillierte Inhalt vonThinkPHP implementiert die Konvertierung von Datenbankabfrage-Ergebnisdaten in entsprechende Typen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage