- 普通 - 未处理
[i=s] 本帖最后由 xhowhy 于 2010-5-10 00:28 编辑 [/i]经我查看了tp目录中Thinkphp/Lib/Think/Core/Model/RelationModel.class.php中的源码,发现问题的原因出在RelationModel.class.php中的第171行处:
// 获取关联模型对象
$model = M($mappingClass);
改成: // 获取关联模型对象
$model = D($mappingClass);
原因在于M函数和D函数的区别,M函数用于实例化一个没有模型文件的Model,而D函数用于实例化Model,很显然,根据上下文,这里应该使用D函数。因为就算是被关联模型,也是可能有自定义的模型文件,可能自定义表前缀、甚至是跨库操作。如果使用了M函数,就使用了配置中的默认表前缀"a_",导致创建模型对象失败。
————————————————问题已解决 bug已反映如上——————————————————
我的应用默认表前缀是"a_",但由于需求需要,我需要从同一数据库的"cdb_activitities"和"cdb_threads"中进行关联查询。
发现查询后内容为bool(false)。
class ActivitiesModel extends RelationModel {
//put your code here
protected $tablePrefix = 'cdb_';
public $_link = array(
'threads'=>array(
'mapping_type'=>HAS_ONE,
'class_name' =>'threads',
'foreign_key'=>'tid'
)
);
}
class ThreadsModel extends Model {
//put your code here
protected $tablePrefix = 'cdb_';
}