This class place data from SELECT result in
CDataProvider <?php /* * CPdoDataProvider class file. * * @author Sobol Andrey <andrey.sobol.nn@gmail.com> * @link http://www.asobol.ru/ * @copyright Copyright © 2010 Sobol Andrey * @version 1.0 * @license GNU 2.0 * * Use and sample: * 1. Place unit in protected/components * 2. In select result first field need primary key field. * 3. Sample use. This is function from my class. * * public function getSqlProvider($aRubricTr){ * $sql= " select distinct _c.customerid from customer _c, customerinfo _ci, rubric _r"; * $sql.=" where get_root_customerid(_ci.customerid)=_c.rootcustomerid"; * $sql.=" and _ci.isactive and _c.isactive"; * $sql.=" and _r.rubricid=_ci.rubricid"; * $sql.=" and _r.tr <@ '$aRubricTr'"; * $sql.=" and _c.parentid IS NULL"; //collect only root customers * * $sqlcount="select count(foo.customerid) from (".$sql.") as foo"; * * if (!$this->_dpCustomerForRubric){ * $this->_dpCustomerForRubric= new CPdoDataProvider(array( * 'sql'=>$sql, * 'sqlcount'=>$sqlcount, * 'pagination'=>array( * 'pageSize'=>self::PAGE_CUST_SIZE), * )); * } * return $this->_dpCustomerForRubric; * } */ class CPdoDataProvider extends CDataProvider{ private $_sql; private $_sqlcount; private $_id; private static $_pdoCounter=0; public function __construct($config) { $this->_id='ywPdo'.self::$_pdoCounter++; $config = new CConfiguration($config); $config->applyTo($this); } public function setSql($sql){ $this->_sql=$sql; } public function getSql(){ return $this->_sql; } public function setSqlCount($sql){ $this->_sqlcount=$sql; } public function getSqlCount(){ return $this->_sqlcount; } public function getId() { $this->_id; } public function setId($value) { $this->_id=$value; } protected function fetchData() { $cn=Yii::app()->db; if(($pagination=$this->getPagination())!==false) { $pagination->setItemCount($this->getTotalItemCount()); $limit=$pagination->pageSize; $offset=$pagination->offset; $cb=$cn->getCommandBuilder(); $sql_pag=$cb->applyLimit($this->_sql, $limit, $offset); $cmd=$cn->createCommand($sql_pag); } else $cmd=$cn->createCommand($this->_sql); //if(($sort=$this->getSort())!==false) // $sort->applyOrder($criteria); return $cmd->queryAll(); } public function getSort() { /*if(($sort=parent::getSort())!==false) $sort->modelClass=$this->modelClass; return $sort;*/ return (parent::getSort()); } protected function fetchKeys() { $keys=array(); foreach($this->getData() as $i=>$data){ $r=each($data); $keys[]=$r[1]; } return $keys; } protected function calculateTotalItemCount() { //calculate total record count for query if (isset($this->_sqlcount)) $q_cnt=$this->_sqlcount; else $q_cnt="select count(foo.*) from ($this->_sql) as foo"; $cn=Yii::app()->db; $cmd=$cn->createCommand($q_cnt); return $cmd->queryScalar(); } } ?> |
Software >