一般应用和需求的复杂程度,我们使用ActiveDataProvider都可以搞定,除非我们实在无法通过QueryBuilder来构造一个复杂的SQL的时候,SqlDataProvider就是你的好伙伴了。
和名字一样,SqlDataProvider接收一个原生的SQL语句并且能生成一个带有参数的dataProvider,并且前台的GridView等都可以很好的使用它。
直接上代码
在Action中如何使用它们
$totalCount = Yii::$app->db->createCommand('SELECT COUNT(*) FROM user WHERE sex=:sex', ['sex:' => 1])
->queryScalar();
$dataProvider = new SqlDataProvider([
'sql' => 'SELECT * FROM userWHERE sex=:sex',
'params' => [':sex' => 1],
'totalCount' => $totalCount,
//'sort' =>false,//如果为假则删除排序
'sort' => [
'attributes' => [
'username' => [
'asc' => ['username' => SORT_ASC],
'desc' => ['username' => SORT_DESC],
'default' => SORT_DESC,
'label' => '用户名',
],
'sex' => [
'asc' => ['sex' => SORT_ASC],
'desc' => ['sex' => SORT_DESC],
'default' => SORT_DESC,
'label' => '性别',
],
'created_on'
],
],
'pagination' => [
'pageSize' => 10,
],
]);
return $dataProvider;
在视图中如何使用它们
<?= GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
[
'label' =>"昵称",
'attribute' => 'nickname',
'value'=>function($data){
return $data["nickname"];
}
],
'username',
'sex',
'created_on',
['class' => 'yii\grid\ActionColumn'],
],
]); ?>
你看懂了没,和ActiveDataProvider一个重要区别就是它数组的形式,而ActiveDataProvider是对象形式。
好,此篇结束,送给那些喜欢写原生SQL或不得不写原生SQL的小伙伴。
本文原创发布于微信公众号 北哥小报 , 严谨的原创技术文,Q群:171277552。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。