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); } } }
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')) {
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!