一般應用和需求的複雜程度,我們使用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。