2014-09-18 09:32:48 20453次浏览 7条回答 14 悬赏 0 金钱

在sql比较复杂,用orm不好实现的情况下需要写原生sql还要用GirdView展现数据;
我的思路是这样的(已实现):

//Controller

$sql = 'select a.id,b.name,c.age from a,b,c where xxx';  
$q = Yii::$app->db2->createCommand($sql)->queryAll();  
$pages = new Pagination([
            'totalCount'=>count($q),
        ]);
$list = Yii::$app->db2->createCommand($sql." limit ".$pages->limit." offset ".$pages->offset."")->queryAll();  
 $dataprovider = new ArrayDataProvider([
       'allModels' => $list,
 ]);  
return $this->render('circle',[
     'dataprovider'=>$dataprovider,
      'pages'=>$pages,
]);  

//View

<?= GridView::widget([  
    'dataProvider'=>$dataprovider,  
    //不显示gridview的分页,在这指定totalCount属性不好使(问题就在这)  
    'pager'=>[
        'options'=>['class'=>'hidden']
    ],
    'columns'=>[
        //此处略去n多字
    ],
]) ?>  
//单独展示分页  
<?= LinkPager::widget([
    'pagination'=>$pages,
]) ?>

虽然这样能实现我想要的结果,但是总感觉姿势不对.求大神指点

补充于 2014-09-18 09:43

格式真难弄啊啊啊...

最佳答案

  • he 发布于 2014-09-20 14:26 举报
    $count = Yii::$app->db->createCommand('
        SELECT COUNT(*) FROM user WHERE status=:status
    ', [':status' => 1])->queryScalar();
    
    $dataProvider = new SqlDataProvider([
        'sql' => 'SELECT * FROM user WHERE status=:status',
        'params' => [':status' => 1],
        'totalCount' => $count,
        'sort' => [
            'attributes' => [
                'age',
                'name' => [
                    'asc' => ['first_name' => SORT_ASC, 'last_name' => SORT_ASC],
                    'desc' => ['first_name' => SORT_DESC, 'last_name' => SORT_DESC],
                    'default' => SORT_DESC,
                    'label' => 'Name',
                ],
            ],
        ],
        'pagination' => [
            'pageSize' => 20,
        ],
    ]);
    
    // get the user records in the current page
    $models = $dataProvider->getModels();
    
    1 条回复
    回复于 2014-09-21 09:45 回复

    受教了,多谢!

    觉得很赞
  • 回答于 2014-09-20 14:13 举报

    视图

    // display pagination
    echo LinkPager::widget([
        'pagination' => $pages,
    ]);
    
    1 条回复
    回复于 2016-08-04 17:22 回复

    $pages请问 这个哪里获得

  • 回答于 2014-09-20 14:26 举报

    为了避免你误人子弟我只好出手了

    , 觉得很赞
  • 回答于 2014-09-25 15:32 举报

    我也出手了,学习....

  • 回答于 2014-12-09 15:37 举报

    为什么我的分页出不来??

  • 回答于 2015-09-18 22:49 举报

    那么,我也给个优雅的回答
    controller:

    public function actionArticlelist(){
    $query = Article::find()->with('cate');
    
            $provider = new ActiveDataProvider([
                'query' => $query,
                'pagination' => [
                    'pageSize' => 3,
                ],
                'sort' => [
                    'defaultOrder' => [
                        //'created_at' => SORT_DESC,
                        'title' => SORT_ASC,
                    ]
                ],
            ]);
           return $this->render('artlist', [
                'model' => $query,
                'dataProvider' => $provider,
            ]);
    }
    

    视图

    use yii\grid\GridView;
    GridView::widget([
                        'dataProvider' => $dataProvider,
                        'summary'=>false,//关闭顶部总条数
                        
                        'pager'=>[
                            //'options'=>['class'=>'hidden']//关闭自带分页
                            'firstPageLabel'=>"First",
                            'prevPageLabel'=>'Prev',
                            'nextPageLabel'=>'Next',
                            'lastPageLabel'=>'Last',
                        ],
                        //'layout'=>false,
                        'columns' => [//other coding
    
    
    2 条回复
    回复于 2016-12-13 08:50 回复

    6666666

    回复于 2016-12-13 08:57 回复

    搜索怎么失效了?

  • 回答于 2017-10-19 16:06 举报

    又涨姿势了

您需要登录后才可以回答。登录 | 立即注册
大裤衩子
CEO

大裤衩子 北京

注册时间:2013-02-17
最后登录:2023-12-29
在线时长:91小时52分
  • 粉丝92
  • 金钱8528
  • 威望120
  • 积分10638

热门问题