Yii2 custom sql query in gridview
Solution 1
You need to install PHP intl extension.i had the same error
given below is my working code in controller
$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,
]);
}
and below is my view
<?= GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'Booking_id',
'Booking_date',
'Movie',
'Theatre',
'Amount',
//~ ['class' => 'yii\grid\ActionColumn'],
],
]); ?>
Solution 2
I met the same problem,It is easy to solve.You need assign the DB as bellow:
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,
]);
}

Admin
Updated on June 28, 2022Comments
-
Admin over 1 year
I'm quite new to Yii2. I'm using advanced structure
I need to show a custom sql result in a view without using a model because I would like to display a sql view.
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, ]); }
At the following Url: http://localhost/advanced/frontend/web/index.php?r=vrisorse%2Findex
I have the error:
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
I tried to comment all the columns in gridview, and the error seems to be related to
$dataProvider
variable'COD_RISORSA','NOME', 'COGNOME'
are columns of the select.