Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yii2
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PSDI Army
yii2
Commits
5883e0f3
Commit
5883e0f3
authored
Nov 30, 2013
by
Qiang Xue
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixes #1358: Added SqlDataProvider.
parent
f5f443ab
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
163 additions
and
0 deletions
+163
-0
classes.php
framework/yii/classes.php
+7
-0
SqlDataProvider.php
framework/yii/data/SqlDataProvider.php
+156
-0
No files found.
framework/yii/classes.php
View file @
5883e0f3
...
...
@@ -74,13 +74,16 @@ return [
'yii\data\DataProviderInterface'
=>
YII_PATH
.
'/data/DataProviderInterface.php'
,
'yii\data\Pagination'
=>
YII_PATH
.
'/data/Pagination.php'
,
'yii\data\Sort'
=>
YII_PATH
.
'/data/Sort.php'
,
'yii\data\SqlDataProvider'
=>
YII_PATH
.
'/data/SqlDataProvider.php'
,
'yii\db\ActiveQuery'
=>
YII_PATH
.
'/db/ActiveQuery.php'
,
'yii\db\ActiveQueryInterface'
=>
YII_PATH
.
'/db/ActiveQueryInterface.php'
,
'yii\db\ActiveQueryTrait'
=>
YII_PATH
.
'/db/ActiveQueryTrait.php'
,
'yii\db\ActiveRecord'
=>
YII_PATH
.
'/db/ActiveRecord.php'
,
'yii\db\ActiveRecordInterface'
=>
YII_PATH
.
'/db/ActiveRecordInterface.php'
,
'yii\db\ActiveRelation'
=>
YII_PATH
.
'/db/ActiveRelation.php'
,
'yii\db\ActiveRelationInterface'
=>
YII_PATH
.
'/db/ActiveRelationInterface.php'
,
'yii\db\ActiveRelationTrait'
=>
YII_PATH
.
'/db/ActiveRelationTrait.php'
,
'yii\db\BaseActiveRecord'
=>
YII_PATH
.
'/db/BaseActiveRecord.php'
,
'yii\db\ColumnSchema'
=>
YII_PATH
.
'/db/ColumnSchema.php'
,
'yii\db\Command'
=>
YII_PATH
.
'/db/Command.php'
,
'yii\db\Connection'
=>
YII_PATH
.
'/db/Connection.php'
,
...
...
@@ -192,12 +195,14 @@ return [
'yii\validators\ValidationAsset'
=>
YII_PATH
.
'/validators/ValidationAsset.php'
,
'yii\validators\Validator'
=>
YII_PATH
.
'/validators/Validator.php'
,
'yii\web\AccessControl'
=>
YII_PATH
.
'/web/AccessControl.php'
,
'yii\web\AccessDeniedHttpException'
=>
YII_PATH
.
'/web/AccessDeniedHttpException.php'
,
'yii\web\AccessRule'
=>
YII_PATH
.
'/web/AccessRule.php'
,
'yii\web\Application'
=>
YII_PATH
.
'/web/Application.php'
,
'yii\web\AssetBundle'
=>
YII_PATH
.
'/web/AssetBundle.php'
,
'yii\web\AssetConverter'
=>
YII_PATH
.
'/web/AssetConverter.php'
,
'yii\web\AssetConverterInterface'
=>
YII_PATH
.
'/web/AssetConverterInterface.php'
,
'yii\web\AssetManager'
=>
YII_PATH
.
'/web/AssetManager.php'
,
'yii\web\BadRequestHttpException'
=>
YII_PATH
.
'/web/BadRequestHttpException.php'
,
'yii\web\CacheSession'
=>
YII_PATH
.
'/web/CacheSession.php'
,
'yii\web\Controller'
=>
YII_PATH
.
'/web/Controller.php'
,
'yii\web\Cookie'
=>
YII_PATH
.
'/web/Cookie.php'
,
...
...
@@ -210,6 +215,8 @@ return [
'yii\web\IdentityInterface'
=>
YII_PATH
.
'/web/IdentityInterface.php'
,
'yii\web\JqueryAsset'
=>
YII_PATH
.
'/web/JqueryAsset.php'
,
'yii\web\JsExpression'
=>
YII_PATH
.
'/web/JsExpression.php'
,
'yii\web\MethodNotAllowedHttpException'
=>
YII_PATH
.
'/web/MethodNotAllowedHttpException.php'
,
'yii\web\NotFoundHttpException'
=>
YII_PATH
.
'/web/NotFoundHttpException.php'
,
'yii\web\PageCache'
=>
YII_PATH
.
'/web/PageCache.php'
,
'yii\web\Request'
=>
YII_PATH
.
'/web/Request.php'
,
'yii\web\Response'
=>
YII_PATH
.
'/web/Response.php'
,
...
...
framework/yii/data/SqlDataProvider.php
0 → 100644
View file @
5883e0f3
<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace
yii\data
;
use
Yii
;
use
yii\base\InvalidConfigException
;
use
yii\base\Model
;
use
yii\db\Connection
;
/**
* SqlDataProvider implements a data provider based on a plain SQL statement.
*
* SqlDataProvider provides data in terms of arrays, each representing a row of query result.
*
* Like other data providers, SqlDataProvider also supports sorting and pagination.
* It does so by modifying the given [[sql]] statement with "ORDER BY" and "LIMIT"
* clauses. You may configure the [[sort]] and [[pagination]] properties to
* customize sorting and pagination behaviors.
*
* SqlDataProvider may be used in the following way:
*
* ~~~
* $count = Yii::$app->db->createCommand('SELECT COUNT(*) FROM tbl_user')->queryScalar();
* $dataProvider = new SqlDataProvider([
* 'sql' => 'SELECT * FROM tbl_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: if you want to use the pagination feature, you must configure the [[totalCount]] property
* to be the total number of rows (without pagination). And if you want to use the sorting feature,
* you must configure the [[sort]] property so that the provider knows which columns can be sorted.
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @since 2.0
*/
class
SqlDataProvider
extends
BaseDataProvider
{
/**
* @var Connection|string the DB connection object or the application component ID of the DB connection.
* If not set, the default DB connection will be used.
*/
public
$db
;
/**
* @var string the SQL statement to be used for fetching data rows.
*/
public
$sql
;
/**
* @var array parameters (name=>value) to be bound to the SQL statement.
*/
public
$params
=
[];
/**
* @var string|callable the column that is used as the key of the data models.
* This can be either a column name, or a callable that returns the key value of a given data model.
*
* If this is not set, the keys of the [[models]] array will be used.
*/
public
$key
;
/**
* Initializes the DB connection component.
* This method will initialize the [[db]] property to make sure it refers to a valid DB connection.
* @throws InvalidConfigException if [[db]] is invalid.
*/
public
function
init
()
{
parent
::
init
();
if
(
is_string
(
$this
->
db
))
{
$this
->
db
=
Yii
::
$app
->
getComponent
(
$this
->
db
);
}
if
(
!
$this
->
db
instanceof
Connection
)
{
throw
new
InvalidConfigException
(
'The "db" property must be a valid DB Connection application component.'
);
}
if
(
$this
->
sql
===
null
)
{
throw
new
InvalidConfigException
(
'The "sql" property must be set.'
);
}
}
/**
* @inheritdoc
*/
protected
function
prepareModels
()
{
$sql
=
$this
->
sql
;
$qb
=
$this
->
db
->
getQueryBuilder
();
if
((
$sort
=
$this
->
getSort
())
!==
false
)
{
$orderBy
=
$qb
->
buildOrderBy
(
$sort
->
getOrders
());
if
(
!
empty
(
$orderBy
))
{
$orderBy
=
substr
(
$orderBy
,
9
);
if
(
preg_match
(
'/\s+order\s+by\s+[\w\s,\.]+$/i'
,
$sql
))
{
$sql
.=
', '
.
$orderBy
;
}
else
{
$sql
.=
' ORDER BY '
.
$orderBy
;
}
}
}
if
((
$pagination
=
$this
->
getPagination
())
!==
false
)
{
$pagination
->
totalCount
=
$this
->
getTotalCount
();
$sql
.=
' '
.
$qb
->
buildLimit
(
$pagination
->
getLimit
(),
$pagination
->
getOffset
());
}
return
$this
->
db
->
createCommand
(
$sql
,
$this
->
params
)
->
queryAll
();
}
/**
* @inheritdoc
*/
protected
function
prepareKeys
(
$models
)
{
$keys
=
[];
if
(
$this
->
key
!==
null
)
{
foreach
(
$models
as
$model
)
{
if
(
is_string
(
$this
->
key
))
{
$keys
[]
=
$model
[
$this
->
key
];
}
else
{
$keys
[]
=
call_user_func
(
$this
->
key
,
$model
);
}
}
return
$keys
;
}
else
{
return
array_keys
(
$models
);
}
}
/**
* @inheritdoc
*/
protected
function
prepareTotalCount
()
{
return
0
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment