YII框架分析笔记8:CDataProvider
来源:互联网 发布:检测显卡的软件 编辑:程序博客网 时间:2024/06/05 16:20
CDataProvider,顾名思义,数据提供者,它提供了三个抽象方法(fetchData,、fetchKeys 和 calculateTotalItemCount),分别为调用不同数据结构的数据提供了获取数据、获取键值、获取数量的,接口,在YII框架中,CActiveDataProvider、CArrayDataProvider、CSqlDataProvider是它的子类,除了提供数据之外,他还提供分页和排序功能。下面以获取数据fetchData()为例
CActiveDataProvider通过CActiveRecord的子类和CDbCriteria对象
/** * Fetches the data from the persistent data storage. * @return array list of data items */protected function fetchData(){ $criteria=clone $this->getCriteria(); if(($pagination=$this->getPagination())!==false) { $pagination->setItemCount($this->getTotalItemCount()); $pagination->applyLimit($criteria); } $baseCriteria=$this->model->getDbCriteria(false); if(($sort=$this->getSort())!==false) { // set model criteria so that CSort can use its table alias setting if($baseCriteria!==null) { $c=clone $baseCriteria; $c->mergeWith($criteria); $this->model->setDbCriteria($c); } else $this->model->setDbCriteria($criteria); $sort->applyOrder($criteria); } $this->model->setDbCriteria($baseCriteria!==null ? clone $baseCriteria : null); $data=$this->model->findAll($criteria); $this->model->setDbCriteria($baseCriteria); // restore original criteria return $data;}CArrayDataProvider通过传人的原生数据来获取数据
/** * Fetches the data from the persistent data storage. * @return array list of data items */protected function fetchData(){ if(($sort=$this->getSort())!==false && ($order=$sort->getOrderBy())!='') $this->sortData($this->getSortDirections($order)); if(($pagination=$this->getPagination())!==false) { $pagination->setItemCount($this->getTotalItemCount()); return array_slice($this->rawData, $pagination->getOffset(), $pagination->getLimit()); } else return $this->rawData;}CSqlDataProvider通过传人的sql,经过db执行获取数据
/** * Fetches the data from the persistent data storage. * @return array list of data items */protected function fetchData(){ $sql=$this->sql; $db=$this->db===null ? Yii::app()->db : $this->db; $db->active=true; if(($sort=$this->getSort())!==false) { $order=$sort->getOrderBy(); if(!empty($order)) { if(preg_match('/\s+order\s+by\s+[\w\s,]+$/i',$sql)) $sql.=', '.$order; else $sql.=' ORDER BY '.$order; } } if(($pagination=$this->getPagination())!==false) { $pagination->setItemCount($this->getTotalItemCount()); $limit=$pagination->getLimit(); $offset=$pagination->getOffset(); $sql=$db->getCommandBuilder()->applyLimit($sql,$limit,$offset); } $command=$db->createCommand($sql); foreach($this->params as $name=>$value) $command->bindValue($name,$value); return $command->queryAll();}
- YII框架分析笔记8:CDataProvider
- 【Yii】CDataProvider
- YII框架分析笔记6:视图
- YII框架分析笔记7:挂件widget
- YII框架分析笔记9:url路由
- YII框架分析笔记10:日志
- YII框架分析笔记11:模块module
- YII框架分析笔记12:主题管理
- YII框架分析笔记13:单元测试
- YII框架分析笔记6:视图
- YII框架分析笔记11:模块module
- YII框架分析笔记1:YII执行流程
- YII框架分析笔记1:YII执行流程
- YII框架分析笔记1:YII执行流程
- Yii PHP 框架分析
- YII框架分析笔记2:组件和事件行为管理
- YII框架分析笔记3:表单模型和验证
- YII框架分析笔记4:ar模型和db
- 用FOR,和数组显示多个精灵并设置位置
- [ARM作品] 2012,最给力嵌入式项目资料!!(原创+图片+程序源码)
- C++=》设计模式之模板模式(Template Method)
- Eclipse快捷键
- IPhone之UIProgressView
- YII框架分析笔记8:CDataProvider
- Linux分区和文件系统
- 改变键盘的颜色
- 11级_Java_曹建波6.14 事务
- 11级_Java_曹建波6.15 JDBC开发
- 为了防止爆内存,UIImageView在release之前,还是要把image置nil~~
- hdu 1754 线段树
- 左右移动的表格
- uitableview上提刷新数据