CSqlDataProvider
鍖 | 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鍙互鐓т互涓嬫柟娉曚娇鐢細
娉ㄦ剰锛氬鏋滀綘瑕佷娇鐢ㄥ垎椤电壒鎬э紝浣犲繀椤婚厤缃totalItemCount 灞炴т负鎵鏈夎褰曟潯鏁帮紙鏈垎椤碉級銆傚鏋滀綘瑕佷娇鐢ㄦ帓搴忕壒鎬э紝 浣犲繀椤婚厤缃sort灞炴т互鑷充簬鏁版嵁鎻愪緵鑰呯煡閬撳摢浜涘垪鑳借繘琛屾帓搴忋
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灞炴т互鑷充簬鏁版嵁鎻愪緵鑰呯煡閬撳摢浜涘垪鑳借繘琛屾帓搴忋
鍏叡灞炴
灞炴 | 绫诲瀷 | 鎻忚堪 | 瀹氫箟鍦 |
---|---|---|---|
data | array | 杩斿洖褰撳墠鍙敤鐨勬暟鎹」銆 | CDataProvider |
db | CDbConnection | 鐢ㄤ簬鏌ヨ鐨勬暟鎹簱杩炴帴銆 缂虹渷涓虹┖锛屾剰鎬濇槸浣跨敤Yii::app()->db銆 | CSqlDataProvider |
id | string | 杩斿洖鎵鏈夋暟鎹彁渚涜呯殑鍞竴鏍囪瘑ID銆 | CDataProvider |
itemCount | integer | 杩斿洖褰撳墠椤甸潰鐨勬暟鎹」鏁扮洰銆 | CDataProvider |
keyField | string | 鍏抽敭瀛楁鍚嶃傜己鐪佷负鈥榠d鈥欍 | CSqlDataProvider |
keys | array | 杩斿洖鐩稿叧鏁版嵁椤圭殑閿 | CDataProvider |
pagination | CPagination | 杩斿洖pagination瀵硅薄銆 | CDataProvider |
params | array | 缁戝畾SQL璇彞鐨勫弬鏁板锛坣ame=>value锛夈 | CSqlDataProvider |
sort | CSort | 杩斿洖sort瀵硅薄銆 | CDataProvider |
sql | string | 鐢ㄤ簬鍙栧緱鏁版嵁琛岀殑SQL璇彞銆 | CSqlDataProvider |
totalItemCount | integer | 杩斿洖鎵鏈夋暟鎹」鐨勬绘暟銆 | CDataProvider |
鍏叡鏂规硶
鍙椾繚鎶ゆ柟娉
鏂规硶 | 鎻忚堪 | 瀹氫箟鍦 |
---|---|---|
calculateTotalItemCount() | 杩斿洖鍏ㄩ儴鏁版嵁鏉℃暟銆 | CSqlDataProvider |
fetchData() | 浠庢寔涔呮暟鎹瓨鍌ㄥ崟鍏冩彁鍙栨暟鎹 | CSqlDataProvider |
fetchKeys() | 浠庢寔涔呮暟鎹瓨鍌ㄥ崟鍏冩彁鍙栨暟鎹」閿笺 | CSqlDataProvider |
灞炴ц缁
db
灞炴
public CDbConnection $db;
鐢ㄤ簬鏌ヨ鐨勬暟鎹簱杩炴帴銆 缂虹渷涓虹┖锛屾剰鎬濇槸浣跨敤Yii::app()->db銆
keyField
灞炴
public string $keyField;
鍏抽敭瀛楁鍚嶃傜己鐪佷负鈥榠d鈥欍
params
灞炴
public array $params;
缁戝畾SQL璇彞鐨勫弬鏁板锛坣ame=>value锛夈
sql
灞炴
public string $sql;
鐢ㄤ簬鍙栧緱鏁版嵁琛岀殑SQL璇彞銆
鏂规硶璇︾粏
__construct()
鏂规硶
public void __construct(string $sql, array $config=array (
))
| ||
$sql | string | SQL璇彞鐢ㄦ潵鑾峰彇澶氳鏁版嵁銆 |
$config | array | 閰嶇疆锛坣ame=>value锛夎缃负杩欎釜绫荤殑鍒濆灞炴у笺 |
婧愮爜锛 framework/web/CSqlDataProvider.php#64 (鏄剧ず)
public function __construct($sql,$config=array())
{
$this->sql=$sql;
foreach($config as $key=>$value)
$this->$key=$value;
}
鏋勯犳柟娉曘
calculateTotalItemCount()
鏂规硶
protected integer calculateTotalItemCount()
| ||
{return} | integer | 鍏ㄩ儴鏁版嵁鏉℃暟銆 |
婧愮爜锛 framework/web/CSqlDataProvider.php#128 (鏄剧ず)
protected function calculateTotalItemCount()
{
return 0;
}
杩斿洖鍏ㄩ儴鏁版嵁鏉℃暟銆 褰撹皟鐢getTotalItemCount()鏃惰繖涓柟娉曡璋冪敤銆 鑰屼笖totalItemCount涓嶆槸浜嬪厛璁惧畾鐨勩 缂虹渷璋冪敤绠鍗曡繑鍥0銆 浣犲彲浠ヨ鐩栬鏂规硶杩斿洖鍑嗙‘鐨勫叏閮ㄦ暟鎹潯鏁般
fetchData()
鏂规硶
protected array fetchData()
| ||
{return} | array | 鏁版嵁椤瑰垪琛 |
婧愮爜锛 framework/web/CSqlDataProvider.php#75 (鏄剧ず)
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();
}
浠庢寔涔呮暟鎹瓨鍌ㄥ崟鍏冩彁鍙栨暟鎹
fetchKeys()
鏂规硶
protected array fetchKeys()
| ||
{return} | array | 鏁版嵁椤归敭鍊煎垪琛ㄣ |
婧愮爜锛 framework/web/CSqlDataProvider.php#112 (鏄剧ず)
protected function fetchKeys()
{
$keys=array();
foreach($this->getData() as $i=>$data)
$keys[$i]=$data[$this->keyField];
return $keys;
}
浠庢寔涔呮暟鎹瓨鍌ㄥ崟鍏冩彁鍙栨暟鎹」閿笺