CActiveDataProvider


system.web
继承 class CActiveDataProvider » CDataProvider » CComponent
实现 IDataProvider
源自 1.1
版本 $Id: CActiveDataProvider.php 3426 2011-10-25 00:01:09Z alexander.makarow $
源码
CActiveDataProvider是基于ActiveRecord实现的一个数据数据提供者。

CActiveDataProvider为类modelClass的ActiveRecord对象 提供数据。它使用AR的CActiveRecord::findAll方法, 从数据库中检索信息。criteria属性能够用来 查询多种指定条件。

CActiveDataProvider的使用方法如下:
$dataProvider=new CActiveDataProvider('Post', array(
    'criteria'=>array(
        'condition'=>'status=1',
        'order'=>'create_time DESC',
        'with'=>array('author'),
    ),
    'pagination'=>array(
        'pageSize'=>20,
    ),
));
// $dataProvider->getData() will return a list of Post objects

公共属性

属性 类型 描述 定义在
criteria CDbCriteria 返回的查询条件。 CActiveDataProvider
data array 返回当前可用的数据项。 CDataProvider
id string 返回所有数据提供者的唯一标识ID。 CDataProvider
itemCount integer 返回当前页面的数据项数目。 CDataProvider
keyAttribute string modelClass的键值属性的名称。如果没有设置, 这意味着将使用相应的数据库表的主键。 CActiveDataProvider
keys array 返回相关数据项的键。 CDataProvider
model CActiveRecord AR finder的实例(例如 Post::model())。 这个属性可以通过将finder的实例作为构造器的第一个参数来设置。 例如, Post::model()->published(). CActiveDataProvider
modelClass string 主ActiveRecord的类名。 getData()方法将会返回这个类的对象的列表。 CActiveDataProvider
pagination CPagination 返回pagination对象。 CDataProvider
sort CSort 返回排序的对象。 CActiveDataProvider
totalItemCount integer 返回所有数据项的总数。 CDataProvider

公共方法

方法 描述 定义在
__call() 如果类中没有调的方法名,则调用这个方法。 CComponent
__construct() 构造方法。 CActiveDataProvider
__get() 返回一个属性值、一个事件处理程序列表或一个行为名称。 CComponent
__isset() 检查一个属性是否为null。 CComponent
__set() 设置一个组件的属性值。 CComponent
__unset() 设置一个组件的属性为null。 CComponent
asa() 返回这个名字的行为对象。 CComponent
attachBehavior() 附加一个行为到组件。 CComponent
attachBehaviors() 附加一个行为列表到组件。 CComponent
attachEventHandler() 为事件附加一个事件处理程序。 CComponent
canGetProperty() 确定属性是否可读。 CComponent
canSetProperty() 确定属性是否可写。 CComponent
detachBehavior() 从组件中分离一个行为。 CComponent
detachBehaviors() 从组件中分离所有行为。 CComponent
detachEventHandler() 分离一个存在的事件处理程序。 CComponent
disableBehavior() 禁用一个附加行为。 CComponent
disableBehaviors() 禁用组件附加的所有行为。 CComponent
enableBehavior() 启用一个附加行为。 CComponent
enableBehaviors() 启用组件附加的所有行为。 CComponent
evaluateExpression() 计算一个PHP表达式,或根据组件上下文执行回调。 CComponent
getCriteria() 返回的查询条件。 CActiveDataProvider
getData() 返回当前可用的数据项。 CDataProvider
getEventHandlers() 返回一个事件的附加处理程序列表。 CComponent
getId() 返回所有数据提供者的唯一标识ID。 CDataProvider
getItemCount() 返回当前页面的数据项数目。 CDataProvider
getKeys() 返回相关数据项的键。 CDataProvider
getPagination() 返回pagination对象。 CDataProvider
getSort() 返回排序的对象。 CActiveDataProvider
getTotalItemCount() 返回所有数据项的总数。 CDataProvider
hasEvent() 确定一个事件是否定义。 CComponent
hasEventHandler() 检查事件是否有附加的处理程序。 CComponent
hasProperty() 确定属性是否被定义。 CComponent
raiseEvent() 发起一个事件。 CComponent
setCriteria() 设置查询条件。 CActiveDataProvider
setData() 为provider设置数据项。 CDataProvider
setId() 设置provider的ID。 CDataProvider
setKeys() 为provider设置数据项的键。 CDataProvider
setPagination() 设置provider的pagination对象。 CDataProvider
setSort() 为数据提供者设置排序。 CDataProvider
setTotalItemCount() 设置所有数据项的总数。 CDataProvider

受保护方法

方法 描述 定义在
calculateTotalItemCount() 计算所有数据项的总数。 CActiveDataProvider
fetchData() 从持久性数据存储中获取数据。 CActiveDataProvider
fetchKeys() 获取持久性数据存储的数据项键。 CActiveDataProvider

属性详细

criteria 属性
public CDbCriteria getCriteria()
public void setCriteria(mixed $value)

返回的查询条件。

keyAttribute 属性
public string $keyAttribute;

modelClass的键值属性的名称。如果没有设置, 这意味着将使用相应的数据库表的主键。

model 属性 (可用自 v1.1.3)
public CActiveRecord $model;

AR finder的实例(例如 Post::model())。 这个属性可以通过将finder的实例作为构造器的第一个参数来设置。 例如, Post::model()->published().

modelClass 属性
public string $modelClass;

主ActiveRecord的类名。 getData()方法将会返回这个类的对象的列表。

sort 属性
public CSort getSort()
public void setSort(mixed $value)

返回排序的对象。

方法详细

__construct() 方法
public void __construct(mixed $modelClass, array $config=array ( ))
$modelClass mixed 模型的类(例如‘Post’)或者模型的finder实例 (例如Post::model()Post::model()->published())。
$config array 配置参数(name=>value)将作为这个类的初始属性值。
public function __construct($modelClass,$config=array())
{
    if(
is_string($modelClass))
    {
        
$this->modelClass=$modelClass;
        
$this->model=CActiveRecord::model($this->modelClass);
    }
    else if(
$modelClass instanceof CActiveRecord)
    {
        
$this->modelClass=get_class($modelClass);
        
$this->model=$modelClass;
    }
    
$this->setId($this->modelClass);
    foreach(
$config as $key=>$value)
        
$this->$key=$value;
}

构造方法。

calculateTotalItemCount() 方法
protected integer calculateTotalItemCount()
{return} integer 数据项的总数。
protected function calculateTotalItemCount()
{
    
$baseCriteria=$this->model->getDbCriteria(false);
    if(
$baseCriteria!==null)
        
$baseCriteria=clone $baseCriteria;
    
$count=$this->model->count($this->getCriteria());
    
$this->model->setDbCriteria($baseCriteria);
    return 
$count;
}

计算所有数据项的总数。

fetchData() 方法
protected array fetchData()
{return} array 数据项列表
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;
}

从持久性数据存储中获取数据。

fetchKeys() 方法
protected array fetchKeys()
{return} array 列表数据项的键。
protected function fetchKeys()
{
    
$keys=array();
    foreach(
$this->getData() as $i=>$data)
    {
        
$key=$this->keyAttribute===null $data->getPrimaryKey() : $data->{$this->keyAttribute};
        
$keys[$i]=is_array($key) ? implode(',',$key) : $key;
    }
    return 
$keys;
}

获取持久性数据存储的数据项键。

getCriteria() 方法
public CDbCriteria getCriteria()
{return} CDbCriteria 查询条件
public function getCriteria()
{
    if(
$this->_criteria===null)
        
$this->_criteria=new CDbCriteria;
    return 
$this->_criteria;
}

返回的查询条件。

getSort() 方法
public CSort getSort()
{return} CSort 排序的对象。如果返回为false,这意味着排序被禁用。
public function getSort()
{
    if((
$sort=parent::getSort())!==false)
        
$sort->modelClass=$this->modelClass;
    return 
$sort;
}

返回排序的对象。

setCriteria() 方法
public void setCriteria(mixed $value)
$value mixed 查询条件。 这可以是一个CDbCriteria的对象或数组构成的查询条件。
public function setCriteria($value)
{
    
$this->_criteria=$value instanceof CDbCriteria $value : new CDbCriteria($value);
}

设置查询条件。