CSqlDataProvider
| Пакет | system.web |
|---|---|
| Наследование | класс CSqlDataProvider » CDataProvider » CComponent |
| Реализует | IDataProvider |
| С версии | 1.1.4 |
| Исходный код | framework/web/CSqlDataProvider.php |
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 | массив | Возвращает элементы данных, доступные в данный момент. | CDataProvider |
| db | CDbConnection | соединение с базой данных, которое должно использоваться в запросах. | CSqlDataProvider |
| id | строка | Возвращает идентификатор, который однозначно идентифицирует поставщик данных. | CDataProvider |
| itemCount | целое число | Возвращает количество элементов данных на текущей странице. | CDataProvider |
| keyField | строка | название ключевого поля. | CSqlDataProvider |
| keys | массив | Возвращает значения ключей, связанные с элементами данных. | CDataProvider |
| pagination | CPagination|false | Возвращает объект пагинации. | CDataProvider |
| params | массив | параметры (имя=>значение), которые должны быть привязаны к SQL-запросу. | CSqlDataProvider |
| sort | CSort|false | Возвращает объект сортировки. | CDataProvider |
| sql | строка|CDbCommand | SQL-запрос, который должен использоваться для извлечения строк данных. | CSqlDataProvider |
| totalItemCount | целое число | Возвращает общее количество элементов данных. | 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() | Возвращает объект постраничной навигации. | CDataProvider |
| getSort() | Возвращает объект сортировки. | CDataProvider |
| getTotalItemCount() | Возвращает общее количество элементов данных. | CDataProvider |
| hasEvent() | Определяет, определено ли событие. | CComponent |
| hasEventHandler() | Проверяет, есть ли прикреплённые обработчики для указанного события. | CComponent |
| hasProperty() | Определяет, определено ли свойство. | CComponent |
| raiseEvent() | Вызывает событие. | CComponent |
| setData() | Устанавливает элементы данных для этого поставщика. | CDataProvider |
| setId() | Устанавливает идентификатор поставщика. | CDataProvider |
| setKeys() | Устанавливает ключи элементов данных для этого поставщика. | CDataProvider |
| setPagination() | Устанавливает постраничную навигацию для этого поставщика данных. | CDataProvider |
| setSort() | Устанавливает сортировку для этого поставщика данных. | CDataProvider |
| setTotalItemCount() | Устанавливает общее количество элементов данных. | CDataProvider |
Защищённые методы
| Метод | Описание | Определено в |
|---|---|---|
| calculateTotalItemCount() | Вычисляет общее количество элементов данных. | CSqlDataProvider |
| fetchData() | Извлекает данные из постоянного хранилища данных. | CSqlDataProvider |
| fetchKeys() | Извлекает ключи элементов данных из постоянного хранилища данных. | CSqlDataProvider |
Подробное описание свойств
db свойство
public CDbConnection $db;
соединение с базой данных, которое будет использоваться в запросах. По умолчанию null, что означает использование Yii::app()->db.
keyField свойство
public string $keyField;
имя поля ключа. По умолчанию 'id'.
params свойство
public array $params;
параметры (имя=>значение), которые будут связаны с SQL-запросом.
sql свойство
public string|CDbCommand $sql;
SQL-запрос, который будет использоваться для извлечения строк данных. С версии 1.1.13 также может быть экземпляром CDbCommand.
Подробное описание методов
__construct() метод
public void __construct(string|CDbCommand $sql, array $config=array ( )) | ||
| $sql | string|CDbCommand | SQL-запрос, который будет использоваться для извлечения строк данных. С версии 1.1.13 также может быть экземпляром CDbCommand. |
| $config | array | настройка (имя=>значение), которая будет применена как начальные значения свойств этого класса. |
public function __construct($sql,$config=array())
{
$this->sql=$sql;
foreach($config as $key=>$value)
$this->$key=$value;
}
Конструктор.
calculateTotalItemCount() метод
protected integer calculateTotalItemCount() | ||
| {return} | integer | общее количество элементов данных. |
protected function calculateTotalItemCount()
{
return 0;
}
Вычисляет общее количество элементов данных. Этот метод вызывается при вызове getTotalItemCount() и если totalItemCount ранее не был задан. Реализация по умолчанию просто возвращает 0. Вы можете переопределить этот метод, чтобы вернуть точное количество элементов данных.
fetchData() метод
protected array fetchData() | ||
| {return} | массив | список элементов данных |
protected function fetchData()
{
if(!($this->sql instanceof CDbCommand))
{
$db=$this->db===null ? Yii::app()->db : $this->db;
$command=$db->createCommand($this->sql);
}
else
$command=clone $this->sql;
if(($sort=$this->getSort())!==false)
{
$order=$sort->getOrderBy();
if(!empty($order))
{
if(preg_match('/\s+order\s+by\s+[\w\s,\.]+$/i',$command->text))
$command->text.=', '.$order;
else
$command->text.=' ORDER BY '.$order;
}
}
if(($pagination=$this->getPagination())!==false)
{
$pagination->setItemCount($this->getTotalItemCount());
$limit=$pagination->getLimit();
$offset=$pagination->getOffset();
$command->text=$command->getConnection()->getCommandBuilder()->applyLimit($command->text,$limit,$offset);
}
foreach($this->params as $name=>$value)
$command->bindValue($name,$value);
return $command->queryAll();
}
Извлекает данные из постоянного хранилища данных.
fetchKeys() метод
protected array fetchKeys() | ||
| {return} | массив | список ключей элементов данных. |
protected function fetchKeys()
{
$keys=array();
if($data=$this->getData())
{
if(is_object(reset($data)))
foreach($data as $i=>$item)
$keys[$i]=$item->{$this->keyField};
else
foreach($data as $i=>$item)
$keys[$i]=$item[$this->keyField];
}
return $keys;
}
Извлекает ключи элементов данных из постоянного хранилища данных.
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CSqlDataProvider