首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >网格视图中的Yii2自定义sql查询

网格视图中的Yii2自定义sql查询
EN

Stack Overflow用户
提问于 2015-04-29 21:29:51
回答 5查看 9.9K关注 0票数 5

我对Yii2还很陌生。我使用的是高级结构

我需要在不使用模型的情况下在视图中显示自定义sql结果,因为我希望显示sql视图。

index.php

代码语言:javascript
复制
<?= GridView::widget([
       'dataProvider' => $dataProvider,
       'columns' => [
            ['class' => 'yii\grid\SerialColumn'],
            'COD_RISORSA',
            [
                'label' =>"Nome",
                'attribute' => 'NOME',
                'value'=>function($data){
                    return $data["NOME"];
                }
            ],
            'COGNOME',
            ['class' => 'yii\grid\ActionColumn'],
        ],
   ]); ?>

VRisorseController.php

代码语言:javascript
复制
public function actionIndex()
{

    $totalCount = Yii::$app->db->createCommand('SELECT COUNT(*) FROM v_risorse')->queryScalar();

    $dataProvider = new SqlDataProvider([
        'sql' => 'SELECT * FROM v_risorse',
        'totalCount' => $totalCount,
        'sort' =>false,
        'pagination' => [
            'pageSize' => 10,
        ],
    ]);

    return $this->render('index', [
        'dataProvider' => $dataProvider,
    ]);
}

在以下网址:http://localhost/advanced/frontend/web/index.php?r=vrisorse%2Findex

我有一个错误:

不支持

- yii\base\NotSupportedException消息格式'number‘仅支持整数值。您必须安装PHP intl扩展才能使用此功能。1.在C:\xampp\htdocs\advanced\vendor\yiisoft\yii2\i18n\MessageFormatter.php中

我尝试注释gridview中的所有列,错误似乎与$dataProvider变量有关

'COD_RISORSA','NOME', 'COGNOME'是select的列。

EN

回答 5

Stack Overflow用户

发布于 2015-06-26 18:12:10

您需要安装PHP intl扩展。我遇到了相同的错误

下面是我在控制器中的工作代码

代码语言:javascript
复制
$count      =   Yii::$app->db->createCommand('
                    SELECT COUNT(*) FROM screen_ticket_booking_history WHERE status=:status
                    ', [':status' => 0])->queryScalar();

                    $sql =  "SELECT A1.booking_id As Booking_id,
                                A1.booking_date As Booking_date,
                                A2.movie_name As Movie,
                                A3.theatre_name As Theatre,
                                A1.amount As Amount

                                FROM 
                                screen_ticket_booking_history A1

                                LEFT OUTER JOIN movies A2 ON A1.movie_id=A2.id
                                LEFT OUTER JOIN theatres A3 ON A1.theatre_id=A3.id
                                LEFT OUTER JOIN users_backend A4 ON A3.users_backend_id=A4.id

                                WHERE A1.booking_date = '{$day}'
                                AND   A1.movie_id='{$movies->id}'";


                    //~ $models = $dataProvider->getModels(); //print_r($models);die();
                    if( $userid != '1')
                    { 
                        $sql .= " AND A3.users_backend_id = '{$userid}' ";
                    }

                    $dataProvider = new SqlDataProvider([
                    'sql' => $sql,
                    'totalCount' => $count,
                    ]);
                    return $this->render('index',
                    [   'model'             => $model,
                        'dataProvider'      => $dataProvider,
                    ]);
                }

下面是我的观点

代码语言:javascript
复制
<?= GridView::widget([
       'dataProvider' => $dataProvider,
       'columns' => [
           ['class' => 'yii\grid\SerialColumn'],

           'Booking_id',
           'Booking_date',
           'Movie',
           'Theatre',
           'Amount',
           //~ ['class' => 'yii\grid\ActionColumn'],
       ],
   ]); ?>
票数 3
EN

Stack Overflow用户

发布于 2017-03-09 22:37:12

我遇到了同样的问题,很容易solve.You需要如下所示的指定DB:

代码语言:javascript
复制
public function actionIndex()
{

    $totalCount = Yii::$app->db->createCommand('SELECT COUNT(*) FROM v_risorse')->queryScalar();

    $dataProvider = new SqlDataProvider([
        **'db' => Yii::$app->db,**
        'sql' => 'SELECT * FROM v_risorse',
        'totalCount' => $totalCount,
        'sort' =>false,
        'pagination' => [
            'pageSize' => 10,
        ],
    ]);

    return $this->render('index', [
        'dataProvider' => $dataProvider,
    ]);
}
票数 1
EN

Stack Overflow用户

发布于 2015-05-01 05:07:37

您需要取消注释

extension=php_mysql.dll

extension=php_mysqli.dll

在您的php.ini中,让我知道是否有效

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29945259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档