关于自定义表前缀的关联查询【bug反馈及修正建议Final】

浏览:576 发布日期:2010/05/09
- 普通 - 未处理
[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_';
}
评论(
后面还有条评论,点击查看>>