diff --git a/base.php b/base.php index db918e7f..a60c6988 100644 --- a/base.php +++ b/base.php @@ -13,7 +13,7 @@ define('START_TIME', microtime(true)); define('START_MEM', memory_get_usage()); // 版本信息 -define('THINK_VERSION', '5.0.0 RC2'); +define('THINK_VERSION', '5.0.0 RC3'); // 系统常量 defined('DS') or define('DS', DIRECTORY_SEPARATOR); defined('THINK_PATH') or define('THINK_PATH', dirname(__FILE__) . DS); diff --git a/library/think/Model.php b/library/think/Model.php index bc390fd0..0b2bee0e 100644 --- a/library/think/Model.php +++ b/library/think/Model.php @@ -839,13 +839,18 @@ abstract class Model implements \JsonSerializable, \ArrayAccess $value = $this->$method($value, $this->data); } elseif (isset($this->type[$name])) { // 类型转换 - $type = $this->type[$name]; + $type = $this->type[$name]; + list($type, $param) = explode(':', $type); switch ($type) { case 'integer': $value = (int) $value; break; case 'float': - $value = (float) $value; + if (empty($param)) { + $value = (float) $value; + } else { + $value = (float) number_format($value, $param); + } break; case 'boolean': $value = (bool) $value; @@ -858,6 +863,7 @@ abstract class Model implements \JsonSerializable, \ArrayAccess $value = json_encode($value, JSON_FORCE_OBJECT); } break; + case 'json': case 'array': if (is_array($value)) { $value = json_encode($value, JSON_UNESCAPED_UNICODE); @@ -891,20 +897,27 @@ abstract class Model implements \JsonSerializable, \ArrayAccess return $this->$method($value, $this->data); } elseif (!is_null($value) && isset($this->type[$name])) { // 类型转换 - $type = $this->type[$name]; + $type = $this->type[$name]; + list($type, $param) = explode(':', $type); switch ($type) { case 'integer': $value = (int) $value; break; case 'float': - $value = (float) $value; + if (empty($param)) { + $value = (float) $value; + } else { + $value = (float) number_format($value, $param); + } break; case 'boolean': $value = (bool) $value; break; case 'datetime': - $value = date($this->dateFormat, $value); + $format = $param ?: $this->dateFormat; + $value = date($format, $value); break; + case 'json': case 'array': $value = json_decode($value, true); break; diff --git a/library/think/db/Builder.php b/library/think/db/Builder.php index 905a6905..3d5be97a 100644 --- a/library/think/db/Builder.php +++ b/library/think/db/Builder.php @@ -89,7 +89,7 @@ abstract class Builder $result = []; foreach ($data as $key => $val) { if (!in_array($key, $fields, true)) { - if ($this->connection->getAttribute('fields_strict')) { + if ($this->connection->getConfig('fields_strict')) { throw new Exception(' fields not exists :[' . $key . ']'); } } else { @@ -106,7 +106,6 @@ abstract class Builder $this->query->bind($key, $val, isset($bind[$key]) ? $bind[$key] : PDO::PARAM_STR); $result[$item] = ':' . $key; } - } } } @@ -573,7 +572,7 @@ abstract class Builder foreach ($dataSet as &$data) { foreach ($data as $key => $val) { if (!in_array($key, $fields, true)) { - if ($this->connection->getAttribute('fields_strict')) { + if ($this->connection->getConfig('fields_strict')) { throw new Exception(' fields not exists :[' . $key . ']'); } unset($data[$key]); diff --git a/library/think/db/Connection.php b/library/think/db/Connection.php index c16956e7..adfc1635 100644 --- a/library/think/db/Connection.php +++ b/library/think/db/Connection.php @@ -167,11 +167,23 @@ abstract class Connection * @param string $config 配置名称 * @return mixed */ - public function getAttribute($config) + public function getConfig($config) { return $this->config[$config]; } + /** + * 设置数据库的配置参数 + * @access public + * @param string $config 配置名称 + * @param mixed $value 配置值 + * @return void + */ + public function setConfig($config, $value) + { + $this->config[$config] = $value; + } + /** * 连接数据库方法 * @access public diff --git a/library/think/db/Query.php b/library/think/db/Query.php index 7f6ca17c..6929d69b 100644 --- a/library/think/db/Query.php +++ b/library/think/db/Query.php @@ -336,7 +336,7 @@ class Query } } } else { - $prefix = $this->connection->getAttribute('prefix'); + $prefix = $this->connection->getConfig('prefix'); // 传入的表名为数组 if (is_array($join)) { if (0 !== $key = key($join)) {