关于 ar 与 日志

Yii版本为1.6

下面是控制器中的一段代码



public function actionList()


	{


		    $tempPage = isset( $_GET['page'] ) ? (int)$_GET['page'] : 1;


		    $tempSign = isset( $_GET['sign'] ) ? trim( $_GET['sign'] ) : $this->sign;


		    $this->sign = $tempSign;


		


		    //从缓存中提取新闻分类


		   $tempData = NewsClass::getInfoBySign( $this->sign );


		    $this->setSeoTitle( $tempData['seo_title']."_页{$tempPage}" );


		    $this->setSeoKeyword( $tempData['seo_keywords'] );


		    $this->setSeoDescription( $tempData['seo_description'] );


		


		    $objNews = new News();


		    //构造条件


		   $tempAryCondition = array();


		    $tempAryCondition['news_ncid'] = array($tempData['nc_id']);


		    $criteria = new CDbCriteria();


		    $criteria->select = 'news_id,news_title,created_dt';


		    $criteria->condition = News::getFormatFrontCondition( $tempAryCondition );


		    $criteria->order = 'news_order asc , created_dt desc';





		    $pages = new CPagination( $objNews->count( $criteria ) );


		    $pages->pageSize = self::PAGE_SIZE;


		    $pages->applyLimit( $criteria );





		    $newsList = $objNews->findAll( $criteria );


		    $tempAryParams = array();


		    $tempAryParams['newsclass'] = $tempData;	


		    $tempAryParams['newsList'] = $newsList;


		    $tempAryParams['pages'] = $pages;


				


		   $this->render( 'index' , $tempAryParams );


	}


日志如下



2009/07/03 15:29:52 [trace] [system.db.CDbConnection] Opening DB connection


2009/07/03 15:29:52 [trace] [system.db.CDbCommand] Querying SQL: SHOW COLUMNS FROM `info_news`


2009/07/03 15:29:52 [trace] [system.db.CDbCommand] Querying SQL: SHOW CREATE TABLE `info_news`


2009/07/03 15:29:52 [trace] [system.db.ar.CActiveRecord] News.count()


2009/07/03 15:29:52 [trace] [system.db.CDbCommand] Querying SQL: SELECT COUNT(*) FROM `info_news` WHERE delete_flg=0 AND news_status = 1 AND news_ncid IN (1)  ORDER BY news_order asc , created_dt desc


2009/07/03 15:29:52 [trace] [system.db.ar.CActiveRecord] News.findAll()


2009/07/03 15:29:52 [trace] [system.db.CDbCommand] Querying SQL: SELECT news_id,news_title,created_dt FROM `info_news` WHERE delete_flg=0 AND news_status = 1 AND news_ncid IN (1)  ORDER BY news_order asc , created_dt desc LIMIT 10


2009/07/03 15:29:52 [trace] [system.db.CDbConnection] Opening DB connection


2009/07/03 15:29:52 [trace] [system.db.CDbCommand] Querying SQL: SHOW COLUMNS FROM `info_news`


2009/07/03 15:29:52 [trace] [system.db.CDbCommand] Querying SQL: SHOW CREATE TABLE `info_news`


2009/07/03 15:29:52 [trace] [system.db.ar.CActiveRecord] News.count()


2009/07/03 15:29:52 [trace] [system.db.CDbCommand] Querying SQL: SELECT COUNT(*) FROM `info_news` WHERE delete_flg=0 AND news_status = 1 AND news_ncid IN ()  ORDER BY news_order asc , created_dt desc


2009/07/03 15:29:52 [error] [system.db.CDbCommand] Error in querying SQL: SELECT COUNT(*) FROM `info_news` WHERE delete_flg=0 AND news_status = 1 AND news_ncid IN ()  ORDER BY news_order asc , created_dt desc


日志配置中 'levels'=>'trace,info,error,warning',

这段代码进行了两次查询 count和findAll,日志中记录的查询却有四次,而且最后一条还是error

不知是怎么回事.

但是日志中出现了重复的查询记录,而且其中一条日志为error

从log看来你这里执行了两次页面请求,因为有两条:Opening DB connection

找到了产生这种情况的原因

当我配置urlManager 的 'urlFormat'=>'path',就出现了这种情况

当取消掉 'urlFormat'=>'path',就不会出现这种情况

访问这地址的url为index.php?r=front/news/list&sign=lvqiaodt

重写规则为

'urlManager'=>array(

	    'showScriptName'=>false,

                              'urlFormat'=>'path',

                              'urlSuffix'=>'.html',

	    'rules'=>array(


	                       //新闻中心


		       'news/*' => front/news/index',

                                                ),

)

可以发现并没有对front/news/list这个地址进行重写,仅仅是加上了'urlFormat'=>'path',

就出现了上面的情况,这是什么原因呢?

而front/news/index这个地址就不存在这种情况。

你的应用中有没有redirect语句?看看它有没有被执行。

如果有IDE跟踪调试就很好了。

没有的话,可以在actionIndex里把debug_backtrace()和$_SERVER的内容写到一个文件里,看看究竟是怎么回事。