Yii2 什么';ActiveDataProvider和SQLDataProvider之间的区别是什么?

Yii2 什么';ActiveDataProvider和SQLDataProvider之间的区别是什么?,yii2,Yii2,我有点困惑。我想知道Yii2ActiveDataProvider和SQLDataProvider之间有什么区别?我在文档中查找它,但也找不到 有人能解释一下我什么时候应该用这个或那个吗?这两者有什么区别 谢谢您的时间。SqlDataProvider使用原始SQL语句,该语句用于获取所需数据,ActiveDataProvider可以使用yii\db\Query或yii\db\ActiveQuery对象 SqlDataProvider示例: $provider = new SqlDataProvid

我有点困惑。我想知道Yii2
ActiveDataProvider
SQLDataProvider
之间有什么区别?我在文档中查找它,但也找不到

有人能解释一下我什么时候应该用这个或那个吗?这两者有什么区别


谢谢您的时间。

SqlDataProvider
使用原始SQL语句,该语句用于获取所需数据,
ActiveDataProvider
可以使用
yii\db\Query
yii\db\ActiveQuery
对象


SqlDataProvider
示例:

$provider = new SqlDataProvider([
   'sql' => 'SELECT * FROM post WHERE status=:status',   //HERE
   'params' => [':status' => 1],
   'totalCount' => $count,
   'pagination' => [
       'pageSize' => 10,
   ],
   'sort' => [
       'attributes' => [
           'title',
           'view_count',
           'created_at',
       ],
   ],
]);
$query = Post::find()->where(['status' => 1]);     // ActiveQuery here

$provider = new ActiveDataProvider([
    'query' => $query,                // and here
    'pagination' => [
        'pageSize' => 10,
    ],
    'sort' => [
        'defaultOrder' => [
            'created_at' => SORT_DESC,
            'title' => SORT_ASC, 
        ]
    ],
]);

ActiveDataProvider
示例:

$provider = new SqlDataProvider([
   'sql' => 'SELECT * FROM post WHERE status=:status',   //HERE
   'params' => [':status' => 1],
   'totalCount' => $count,
   'pagination' => [
       'pageSize' => 10,
   ],
   'sort' => [
       'attributes' => [
           'title',
           'view_count',
           'created_at',
       ],
   ],
]);
$query = Post::find()->where(['status' => 1]);     // ActiveQuery here

$provider = new ActiveDataProvider([
    'query' => $query,                // and here
    'pagination' => [
        'pageSize' => 10,
    ],
    'sort' => [
        'defaultOrder' => [
            'created_at' => SORT_DESC,
            'title' => SORT_ASC, 
        ]
    ],
]);

SqlDataProvider
使用原始SQL语句,该语句用于获取所需数据,
ActiveDataProvider
可以采用
yii\db\Query
yii\db\ActiveQuery
对象


SqlDataProvider
示例:

$provider = new SqlDataProvider([
   'sql' => 'SELECT * FROM post WHERE status=:status',   //HERE
   'params' => [':status' => 1],
   'totalCount' => $count,
   'pagination' => [
       'pageSize' => 10,
   ],
   'sort' => [
       'attributes' => [
           'title',
           'view_count',
           'created_at',
       ],
   ],
]);
$query = Post::find()->where(['status' => 1]);     // ActiveQuery here

$provider = new ActiveDataProvider([
    'query' => $query,                // and here
    'pagination' => [
        'pageSize' => 10,
    ],
    'sort' => [
        'defaultOrder' => [
            'created_at' => SORT_DESC,
            'title' => SORT_ASC, 
        ]
    ],
]);

ActiveDataProvider
示例:

$provider = new SqlDataProvider([
   'sql' => 'SELECT * FROM post WHERE status=:status',   //HERE
   'params' => [':status' => 1],
   'totalCount' => $count,
   'pagination' => [
       'pageSize' => 10,
   ],
   'sort' => [
       'attributes' => [
           'title',
           'view_count',
           'created_at',
       ],
   ],
]);
$query = Post::find()->where(['status' => 1]);     // ActiveQuery here

$provider = new ActiveDataProvider([
    'query' => $query,                // and here
    'pagination' => [
        'pageSize' => 10,
    ],
    'sort' => [
        'defaultOrder' => [
            'created_at' => SORT_DESC,
            'title' => SORT_ASC, 
        ]
    ],
]);

您能告诉我需要使用该
SqlDataProvider
的情况吗?当我们可以编写
查询
(如第二个示例中所示)时,为什么我们需要编写原始SQL语句呢?
SqlDataProvider可以在您有非常复杂的SQL查询时使用,当乞丐们不知道如何将查询转换为
ActiveQuery
时,他们经常使用它。您能告诉我当我们需要使用
SqlDataProvider
时的情况吗?当我们可以编写
query
(如第二个示例)时,为什么我们需要编写原始SQL语句呢?
SqlDataProvider
可以用于真正复杂的SQL查询,当乞丐不知道如何将查询转换为
ActiveQuery
时,他们经常使用它。