重现条件和步骤:
入口文件关闭调试模式,即 APP_DEBUG 定义为True
配置模型开启字段缓存,即'DB_FIELDS_CACHE' => true,
运行结果见下图(字段是不一样的,但是现在看到的却一样):

第二次还是把入口文件关闭调试模式,即 APP_DEBUG 定义为True
与第一次不同的是关闭模型字段缓存,即'DB_FIELDS_CACHE' => false,
运行结果居然神奇的正确了见下图:

最后无奈看了下Tp的Model.class.php文件
public function __construct($name='',$tablePrefix='',$connection='') {
// 模型初始化
$this->_initialize();
// 获取模型名称
if(!empty($name)) {
if(strpos($name,'.')) { // 支持 数据库名.模型名的 定义
list($this->dbName,$this->name) = explode('.',$name);注意这行(源文件的 Line 78) list($this->dbName,$this->name) = explode('.',$name);如果在数据源中定义数据库名字,这里是不会被覆盖的,这个暂且不说,关键是后面两个地方的 dbName源文件的 Line 111的代码 从 C('DB_NAME') 这里获值,如果是从数据源设置怎么办?
$db = $this->dbName?:C('DB_NAME');同理,源文件的 Line 165 行的 也是同样的问题$db = $this->dbName?:C('DB_NAME');以下是个人的建议:是否建立一个getDbName的方法来统一获取dbName ??
本次用到的代码都在附件的test.tar.gz文件里面
附件根目录下的db.sql是本次演示的数据库sql文件,带 create databa
CREATE DATABASE IF NOT EXISTS `db1` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `db1`;
CREATE TABLE `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(20) NOT NULL,
`user_password` varchar(32) NOT NULL,
`age` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE DATABASE IF NOT EXISTS `db2` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `db2`;
CREATE TABLE `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`pwd` varchar(32) NOT NULL,
`age` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
test.tar.gz
( 853.64 KB 下载:6 次 )
最佳答案