Yii Framework v1.1.10 绫诲弬鑰

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" 浠庡彞瀹炵幇銆 浣犲彲浠ラ厤缃sortpagination 灞炴т紭鍖栨帓搴忓拰鍒嗛〉琛屼负銆

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

鍏叡鏂规硶

闅愯棌缁ф壙鏂规硶

鏂规硶鎻忚堪瀹氫箟鍦
__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() 璁$畻涓涓狿HP琛ㄨ揪寮忥紝鎴栨牴鎹粍浠朵笂涓嬫枃鎵ц鍥炶皟銆 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() 涓簆rovider璁剧疆鏁版嵁椤广 CDataProvider
setId() 璁剧疆provider鐨処D銆 CDataProvider
setKeys() 涓簆rovider璁剧疆鏁版嵁椤圭殑閿 CDataProvider
setPagination() 璁剧疆provider鐨刾agination瀵硅薄銆 CDataProvider
setSort() 涓烘暟鎹彁渚涜呰缃帓搴忋 CDataProvider
setTotalItemCount() 璁剧疆鎵鏈夋暟鎹」鐨勬绘暟銆 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;
}

浠庢寔涔呮暟鎹瓨鍌ㄥ崟鍏冩彁鍙栨暟鎹」閿笺

Copyright © 2008-2011 by Yii Software LLC
All Rights Reserved.