CSqlDataProvider

优质
小牛编辑
132浏览
2023-12-01
所有包 | 属性 | 方法
system.web
继承class CSqlDataProvider » CDataProvider » CComponent
实现IDataProvider
源自1.1.4
版本$Id: CSqlDataProvider.php 2820 2011-01-06 17:15:56Z mdomba $
源码framework/web/CSqlDataProvider.php
CSqlDataProvider实现一个基于纯SQL语句的数据提供者。

CSqlDataProvider以数组集合的形式提供数据,每个数组代表一行查询结果。

和其他数据提供者一样,CSqlDataProvider也支持排序和分页。 通过修改给出的sql 语句的 "ORDER BY" 和 "LIMIT" 从句实现。 你可以配置sort和pagination 属性优化排序和分页行为。

CSqlDataProvider可以照以下方法使用:
$count=Yii::app()->db->createCommand('SELECT COUNT(*) FROM tbl_user')->queryScalar();
$sql='SELECT * FROM tbl_user';
$dataProvider=new CSqlDataProvider($sql, array(  'totalItemCount'=>$count,  'sort'=>array(      'attributes'=>array(           'id', 'username', 'email',      ),  ),  'pagination'=>array(      'pageSize'=>10,  ),
));
// $dataProvider->getData() will return a list of arrays.


注意:如果你要使用分页特性,你必须配置totalItemCount 属性为所有记录条数(未分页)。如果你要使用排序特性, 你必须配置sort属性以至于数据提供者知道哪些列能进行排序。

公共属性

隐藏继承属性

属性类型描述定义在
dataarray返回当前可用的数据项。CDataProvider
dbCDbConnection用于查询的数据库连接。 缺省为空,意思是使用Yii::app()->db。CSqlDataProvider
idstring返回所有数据提供者的唯一标识ID。CDataProvider
itemCountinteger返回当前页面的数据项数目。CDataProvider
keyFieldstring关键字段名。缺省为‘id’。CSqlDataProvider
keysarray返回相关数据项的键。CDataProvider
paginationCPagination返回pagination对象。CDataProvider
paramsarray绑定SQL语句的参数对(name=>value)。CSqlDataProvider
sortCSort返回sort对象。CDataProvider
sqlstring用于取得数据行的SQL语句。CSqlDataProvider
totalItemCountinteger返回所有数据项的总数。CDataProvider

公共方法

隐藏继承方法

方法描述定义在
__call()如果类中没有调的方法名,则调用这个方法。CComponent
__construct()构造方法。CSqlDataProvider
__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
getData()返回当前可用的数据项。CDataProvider
getEventHandlers()返回一个事件的附加处理程序列表。CComponent
getId()返回所有数据提供者的唯一标识ID。CDataProvider
getItemCount()返回当前页面的数据项数目。CDataProvider
getKeys()返回相关数据项的键。CDataProvider
getPagination()返回pagination对象。CDataProvider
getSort()返回sort对象。CDataProvider
getTotalItemCount()返回所有数据项的总数。CDataProvider
hasEvent()确定一个事件是否定义。CComponent
hasEventHandler()检查事件是否有附加的处理程序。CComponent
hasProperty()确定属性是否被定义。CComponent
raiseEvent()发起一个事件。CComponent
setData()为provider设置数据项。CDataProvider
setId()设置provider的ID。CDataProvider
setKeys()为provider设置数据项的键。CDataProvider
setPagination()设置provider的pagination对象。CDataProvider
setSort()为数据提供者设置排序。CDataProvider
setTotalItemCount()设置所有数据项的总数。CDataProvider

受保护方法

隐藏继承方法

方法描述定义在
calculateTotalItemCount()返回全部数据条数。CSqlDataProvider
fetchData()从持久数据存储单元提取数据。CSqlDataProvider
fetchKeys()从持久数据存储单元提取数据项键值。CSqlDataProvider

属性详细

db 属性 public CDbConnection $db;

用于查询的数据库连接。 缺省为空,意思是使用Yii::app()->db。

keyField 属性 public string $keyField;

关键字段名。缺省为‘id’。

params 属性 public array $params;

绑定SQL语句的参数对(name=>value)。

sql 属性 public string $sql;

用于取得数据行的SQL语句。

方法详细

__construct() 方法
public void __construct(string $sql, array $config=array ( ))
$sqlstringSQL语句用来获取多行数据。
$configarray配置(name=>value)设置为这个类的初始属性值。
源码: framework/web/CSqlDataProvider.php#64 (显示) publicfunction__construct($sql,$config=array())
{
$this->sql=$sql;
foreach($configas$key=>$value)
$this->$key=$value;
}

构造方法。

calculateTotalItemCount() 方法
protected integer calculateTotalItemCount()
{return}integer全部数据条数。
源码: framework/web/CSqlDataProvider.php#128 (显示) protectedfunctioncalculateTotalItemCount()
{
return0;
}

返回全部数据条数。 当调用getTotalItemCount()时这个方法被调用。 而且totalItemCount不是事先设定的。 缺省调用简单返回0。 你可以覆盖该方法返回准确的全部数据条数。

fetchData() 方法
protected array fetchData()
{return}array数据项列表
源码: framework/web/CSqlDataProvider.php#75 (显示) protectedfunctionfetchData()
{
$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+orders+bys+[ws,]+$/i',$sql))
$sql.=','.$order;
else
$sql.='ORDERBY'.$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->paramsas$name=>$value)
$command->bindValue($name,$value);

return$command->queryAll();
}

从持久数据存储单元提取数据。

fetchKeys() 方法
protected array fetchKeys()
{return}array数据项键值列表。
源码: framework/web/CSqlDataProvider.php#112 (显示) protectedfunctionfetchKeys()
{
$keys=array();
foreach($this->getData()as$i=>$data)
$keys[$i]=$data[$this->keyField];
return$keys;
}

从持久数据存储单元提取数据项键值。