虽然不使用active recored,但其他的特性我还要保留。代码怎么组织,还请大家给点意见
虽然不使用active recored,但其他的特性我还要保留。代码怎么组织,还请大家给点意见
我在UserController中新加动作:
public function actionListNoAR() {
$sql = 'select * from user';
$sqlCount = 'select count(*) from user';
$command = Yii::app()->db->createCommand($sql);
$reader = $command->query();
$criteria=new CDbCriteria;
$pages=new CPagination($command->queryScalar($sqlCount));
$pages->pageSize=self::PAGE_SIZE;
$pages->applyLimit($criteria);
$userList=User::model()->findAll($criteria);
$this->render('listnoar',array(
'userList'=>$reader,
'pages'=>$pages,
));
}
视图listnoar的代码:<?php var_dump($userList);?>
执行后,视图内容为以下内容,而不是我原来的记录集:
<div id="content">
array(2) {
["userList"]=>
object(CDbDataReader)#23 (6) {
["_statement:private"]=>
object(PDOStatement)#22 (1) {
["queryString"]=>
string(18) "select * from user"
}
["_closed:private"]=>
bool(false)
["_row:private"]=>
NULL
["_index:private"]=>
int(-1)
["_e:private"]=>
NULL
["_m:private"]=>
NULL
}
["pages"]=>
object(CPagination)#25 (7) {
["pageVar"]=>
string(4) "page"
["route"]=>
string(0) ""
["_pageSize:private"]=>
int(10)
["_itemCount:private"]=>
string(1) "1"
["_currentPage:private"]=>
int(0)
["_e:private"]=>
NULL
["_m:private"]=>
NULL
}
}
object(CDbDataReader)#23 (6) {
["_statement:private"]=>
object(PDOStatement)#22 (1) {
["queryString"]=>
string(18) "select * from user"
}
["_closed:private"]=>
bool(false)
["_row:private"]=>
NULL
["_index:private"]=>
int(-1)
["_e:private"]=>
NULL
["_m:private"]=>
NULL
}
</div>
我不知道该怎么样来写代码了,还请指点!
谢谢!
你的User class是怎样的?有没有继承CActiveRecord? 为什么有User::model()这种用法呢?你这段程序没什么不需要用AR的地方啊?
我的USER CLASS在生成DEMO后就没有改变。
我想在render()中传递记录集,而不是传递
$userList=User::model()->findAll($criteria);这种方式产生的数组
而是使用如下方式:
$sql = 'select * from user';
$sqlCount = 'select count(*) from user';
$command = Yii::app()->db->createCommand($sql);
$reader = $command->query();
$criteria=new CDbCriteria;
$pages=new CPagination($command->queryScalar($sqlCount));
$pages->pageSize=self::PAGE_SIZE;
$pages->applyLimit($criteria);
$this->render('listnoar',array(
'userList'=>$reader,
'pages'=>$pages,
));
}
不知道这次我描述清楚了吗?
你这样做当然可以,但似乎没什么好处啊。你节省的只是读数据的时间,但是你的代码结构却乱了,有点得不偿失。
另外reader返回的是数组,而不是AR对象。
是不是render中只接收ar数据呢?
render()可以放任何数据。render指负责把传给它的array转换成对应的PHP局部变量。
重新看了一下API,原来是我用的方法错了,
$reader = $command->queryAll();
使用上边的方法获得全部记录集,再修改一下VIEW文件,就可以了。
你在性能调试 Performance Tuning 不是说 要 尽量不使用cactiverecord 么?
但是数据结构又特复杂 咋办?
可不可以 把createCommand($sql)->queryAll() 的结果集 转化为 对象形式?
通过对象->getDate() 来实现输出前 格式化date字段 着实方便