Class yii\data\SqlDataProvider

继承yii\data\SqlDataProvider » yii\data\BaseDataProvider » yii\base\Component » yii\base\BaseObject
实现yii\base\Configurable, yii\data\DataProviderInterface
可用自版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/data/SqlDataProvider.php

SqlDataProvider 基于纯 SQL 语句实现数据提供者.

SqlDataProvider 以数组的形式提供数据, 每个数据表示一行查询结果.

与其它数据提供者一样, SqlDataProvider 也支持排序和分页. 它通过使用ORDER BYLIMIT子句修改给定的 $sql 语句来实现此操作. 你可以配置 $sort$pagination 属性以自定义排序和分页行为.

SqlDataProvider 可以按以下方式使用:

$count = Yii::$app->db->createCommand('
    SELECT COUNT(*) FROM user WHERE status=:status
', [':status' => 1])->queryScalar();

$dataProvider = new SqlDataProvider([
    'sql' => 'SELECT * FROM user WHERE status=:status',
    'params' => [':status' => 1],
    'totalCount' => $count,
    'sort' => [
        'attributes' => [
            'age',
            'name' => [
                'asc' => ['first_name' => SORT_ASC, 'last_name' => SORT_ASC],
                'desc' => ['first_name' => SORT_DESC, 'last_name' => SORT_DESC],
                'default' => SORT_DESC,
                'label' => 'Name',
            ],
        ],
    ],
    'pagination' => [
        'pageSize' => 20,
    ],
]);

// get the user records in the current page
$models = $dataProvider->getModels();

Note: 如果要使用分页功能, 则必须将 $totalCount 属性配置为总行数(不含分页). 并且, 如果要使用排序功能, 则必须配置 $sort 属性, 以便提供者知道可以对哪些列进行排序.

有关 SqlDataProvider 的更多详细信息和使用信息, 请参阅 权威指南 - 显示数据 - 数据提供器(Data Providers).

公共属性

隐藏继承的属性

属性类型描述定义在
$behaviors yii\base\Behavior[] 附加到此组件的行为列表. 该属性是只读的. yii\base\Component
$count integer 当前页面中的数据模型的数量. 该属性是只读的. yii\data\BaseDataProvider
$db yii\db\Connection|array|string 数据库连接对象或数据库连接的应用程序组件ID. yii\data\SqlDataProvider
$id string 在所有数据提供者中唯一标识数据提供者的 ID. yii\data\BaseDataProvider
$key string|callable 用作数据模型的键的列. yii\data\SqlDataProvider
$keys array 对应于 $models 的键值列表. $models 中的每个数据模型都由该数组中相应的键值唯一标识. yii\data\BaseDataProvider
$models array 当前页面中的数据模型列表. yii\data\BaseDataProvider
$pagination yii\data\Pagination|false 分页对象. 如果为false, 则表示分页被禁用. 请注意, 此属性的类型在 getter 和 setter 中有所不同. 有关详细信息, 请参阅getPagination()setPagination(). yii\data\BaseDataProvider
$params array 要绑定到 SQL 语句的参数(name=>value). yii\data\SqlDataProvider
$sort yii\data\Sort|boolean 排序对象. 如果为false, 则表示排序被禁用. 请注意, 此属性的类型在 getter 和 setter 中有所不同. 有关详细信息, 请参阅 getSort()setSort(). yii\data\BaseDataProvider
$sql string 用于获取数据行的 SQL 语句. yii\data\SqlDataProvider
$totalCount integer 可能的数据模型的总数. yii\data\BaseDataProvider

公共方法

隐藏继承的方法

方法描述定义在
__call() 调用不是类方法的指定的方法. yii\base\Component
__clone() 在通过克隆现有对象创建对象之后调用此方法. yii\base\Component
__construct() 构造函数. yii\base\BaseObject
__get() 返回组件属性的值. yii\base\Component
__isset() 检查属性是否已设置, 即已定义且不为null. yii\base\Component
__set() 设置组件属性的值. yii\base\Component
__unset() 将组件属性设置为null. yii\base\Component
attachBehavior() 将行为附加到此组件. yii\base\Component
attachBehaviors() 将行为列表附加到组件. yii\base\Component
behaviors() 返回此组件应该具有的行为列表. yii\base\Component
canGetProperty() 返回一个值, 指示属性是否可读取. yii\base\Component
canSetProperty() 返回一个值, 指示属性是否可设置. yii\base\Component
className() 返回此类的完全限定名称. yii\base\BaseObject
detachBehavior() 从组件中分离一个行为. yii\base\Component
detachBehaviors() 分离组件中的所有行为. yii\base\Component
ensureBehaviors() 确保在 behaviors() 中声明的行为已附加到此组件. yii\base\Component
getBehavior() 返回指定的行为对象. yii\base\Component
getBehaviors() 返回附加到此组件的所有行为. yii\base\Component
getCount() 返回当前页面中的数据模型的数量. yii\data\BaseDataProvider
getKeys() 返回与数据模型关联的键值列表. yii\data\BaseDataProvider
getModels() 返回当前页面中的数据模型列表. yii\data\BaseDataProvider
getPagination() 返回此数据提供者使用的分页对象. yii\data\BaseDataProvider
getSort() 返回此数据提供者使用的排序对象. yii\data\BaseDataProvider
getTotalCount() 返回数据模型的总数. yii\data\BaseDataProvider
hasEventHandlers() 返回一个值, 指示是否有任何处理程序附加到指定的事件. yii\base\Component
hasMethod() 返回一个值, 指示方法是否已定义. yii\base\Component
hasProperty() 返回一个值, 指示属性是否已定义. yii\base\Component
init() 初始化数据库连接组件. yii\data\SqlDataProvider
off() 从该组件分离现有的事件处理程序. yii\base\Component
on() 将事件处理程序附加到事件. yii\base\Component
prepare() 准备数据模型和键. yii\data\BaseDataProvider
refresh() 刷新数据提供者. yii\data\BaseDataProvider
setKeys() 设置与数据模型关联的键值列表. yii\data\BaseDataProvider
setModels() 在当前页面中设置数据模型. yii\data\BaseDataProvider
setPagination() 为此数据提供者设置分页. yii\data\BaseDataProvider
setSort() 为此数据提供者设置排序定义。 yii\data\BaseDataProvider
setTotalCount() 设置数据模型的总数. yii\data\BaseDataProvider
trigger() 触发事件. yii\base\Component

受保护的方法

隐藏继承的方法

方法描述定义在
prepareKeys() 准备与当前可用数据模型关联的键. yii\data\SqlDataProvider
prepareModels() 准备将在当前页面中提供的数据模型. yii\data\SqlDataProvider
prepareTotalCount() 返回一个值, 该值指示此数据提供者中的数据模型总数. yii\data\SqlDataProvider

属性详情

$db public 属性

数据库连接对象或数据库连接的应用程序组件ID.

从版本 2.0.2 开始, 这也可以是用于创建对象的配置数组.

$key public 属性

用作数据模型的键的列.

这可以是列名称, 也可以是返回给定数据模型的键值的可调用对象.

如果未设置, 将使用 $models 数组的键.

public string|callable $key null
$params public 属性

要绑定到 SQL 语句的参数(name=>value).

public array $params = []
$sql public 属性

用于获取数据行的 SQL 语句.

public string $sql null

方法详情

init() public 方法

初始化数据库连接组件.

此方法将初始化 $db 属性, 以确保它引用了有效的数据库连接.

public void init ( )
throws yii\base\InvalidConfigException

如果 $db 无效.

prepareKeys() protected 方法

准备与当前可用数据模型关联的键.

protected array prepareKeys ( $models )
$models array

可用的数据模型.

return array

键.

prepareModels() protected 方法

准备将在当前页面中提供的数据模型.

protected array prepareModels ( )
return array

可用的数据模型.

prepareTotalCount() protected 方法

返回一个值, 该值指示此数据提供者中的数据模型总数.

protected integer prepareTotalCount ( )
return integer

此数据提供者中的数据模型总数.