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

阿北發表於2017-07-07

一般應用和需求的複雜程度,我們使用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` => `yiigridSerialColumn`],
        [
            `label` =>"暱稱",
            `attribute` => `nickname`,
            `value`=>function($data){
                return $data["nickname"];
            }
        ],
        `username`,
        `sex`,
        `created_on`,
        [`class` => `yiigridActionColumn`],
    ],
]); ?>

你看懂了沒,和ActiveDataProvider一個重要區別就是它陣列的形式,而ActiveDataProvider是物件形式。

好,此篇結束,送給那些喜歡寫原生SQL或不得不寫原生SQL的小夥伴。

本文原創釋出於微信公眾號 北哥小報 , 嚴謹的原創技術文,Q群:171277552。

微信掃碼可以關注

相關文章