2015-04-29 56 views
4

我对Yii2相当陌生。 我正在使用高级结构在gridview中Yii2自定义sql查询

我需要在视图中显示自定义的sql结果而不使用模型,因为我想显示一个sql视图。

的index.php

<?= 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

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

我有错误:

Not Supported – yii\base\NotSupportedException Message format 'number' is only supported for integer values. You have to install PHP intl extension to use this feature. 1. in C:\xampp\htdocs\advanced\vendor\yiisoft\yii2\i18n\MessageFormatter.php

我试图评论gridview中的所有列,并且该错误似乎与$dataProvider变量

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

+0

错误似乎与国际功能,请张贴你的配置。 – scaisEdge

+0

在您的'php.ini'中取消注释'extension = php_intl.dll'并重新启动webserver – user1852788

回答

0

您必须解除

extension=php_mysql.dll

extension=php_mysqli.dll

在php.ini中,让我知道,如果作品

3

你需要安装PHP国际extension.i有同样的下面给出错误

是我工作的代码 在控制器

$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, 
        ]); 
       } 

以下是我的看法

<?= GridView::widget([ 
     'dataProvider' => $dataProvider, 
     'columns' => [ 
      ['class' => 'yii\grid\SerialColumn'], 

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

我遇到了同样的问题,这是很容易solve.You需要分配DB波纹管:

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, 
    ]); 
}