就写SQL咋的了~在Yii2中使用SqlDataProvider的方法

一般应用和需求的复杂程度,我们使用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。

微信扫码可以关注
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值