[已解决]如果不使用active record特性,我需要如何来组织代码呢?

虽然不使用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字段 着实方便