3.1.3 - 普通 - 已处理
我有个表a_fields,其中有个字段 datatype enum('datetime','double','string','int','float','bool','','array','dict') 类型以下代码会使datatype的值为0
M('fields')->where(array('ID'=>$id))->setField('datatype',trim($_POST['datatype']));原因:Runtime/Data/_fields/ 的字段缓存
'datatype' => 'enum(\'datetime\',\'double\',\'string\',\'int\',\'float\',\'bool\',\'\',\'array\',\'dict\')'Model.class.php 类的 _parseType 方法误过滤了,他把包含有 这些类型字符串都做相应的转换,但这不是我想要的。 protected function _parseType(&$data,$key) {
$fieldType = strtolower($this->fields['_type'][$key]);
if(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];
}
}目前的解决方法 只有用 原始的SQL解决。//这种方式就不行
M('fields')->where(array('ID'=>$id))->setField('datatype',trim($_POST['datatype']));
//这种方式就可以
M('fields')->execute("UPDATE `__TABLE__` SET `datatype`='" . trim($_POST['datatype']) . "' WHERE ( `ID` = {$id} )") 