这是我在common.php文件中的函数:
/**
* 获取某个表的分页数据
* $option键/值对数组的可用键值为
* tablename :欲查询的表名(必须)
* where :查询的where条件
* relation :关联模型的关联查询方法参数,RelationModel()->relation()
* field : Model的field方法参数,欲查询的字段
* order :排序字段,Model()->order()方法参数
* group : 分组依据的字段,Model()->group();方法的参数
* 示例:
* $option['tablename']='user';
* $option['where']='id=1';
* getPageData($show,$data,$option);
*
* @param &$show 用以保存page->show()方法返回的分页信息(传址方式)
* @param &$data 用以保存查询到的数据(传址方式)
*/
function getPageData(&$show,&$data,$option = array())
{
extract($option);
$db=D($tablename);
$count=0;
import('ORG.Util.Page');
if($where!=null){
$count=$db->where($where)->count();
}else{
$count = $db->count();
}
$page = new Page($count , C('PAGING_COUNT'));
$show = $page->show();
if($relation!=null){
$data = $db->relation($relation)->field($field)->group($group)->order($order)
->where($where)->limit($page->firstRow.','.$page->listRows)->select();
}else{
$data = $db->field($field)->group($group)->order($order)
->where($where)->limit($page->firstRow.','.$page->listRows)->select();
}
}
这是Model文件<?php
class DailyTasksModel extends RelationModel
{
// 定义关联关系
protected $_link = array (
//任务状态
'type' => array(
'mapping_type' => BELONGS_TO,
'class_name' => 'Tasktype',
'foreign_key' => 'TT_Id',
'mapping_fields' => 'TT_Id,TT_Name',
'mapping_name' => 'type',
'as_fields' => 'TT_Id,TT_Name',
),
);
}
?>
问题来了,在我的DailyTasksAction.class.php控制器中可以这么使用D('Dailytasks')->relation(true)->select();。这句代码执行后可以正常返回数据。但是如果在DailyTasksAction.class.php控制器中这样调用:$option['tablename']='Dailytasks';
$option['relation']='type';
getPageData($page,$list,$option);
则会导致错误Model:relation您所请求的方法不存在!而如果我在common.php文件前面添加RelationModel的引用
require('/ThinkPHP/Extend/Model/RelationModel.class.php');
则提示Cannot redeclare class RelationModel!!!
所以我就想问问是ThinkPHP的bug还是我自己哪里搞错了????
感谢大家的帮忙。(●'◡'●)
最佳答案
