简体   繁体   中英

yii1 CGridview with custom SQL

i need to use yii1 CGridView with the custom SQL. i have followed this article

inside model I've created

public function searchUserStats()
{
    $count = Yii::app()->db->createCommand()
                ->select('count(DISTINCT user_id)')
                ->from('casino_sg_sessions')
                ->queryScalar();

    $sql = '
            SELECT
                    SUM(bet) bet_sum,
                    SUM(win) win_sum,
                    SUM(bet_count) bet_count,
                    user_id,
                    userName,
                    modified
            FROM        
                (SELECT
                        (SELECT IFNULL(SUM(tr1.amount), 0) FROM casino_sg_transactions tr1 WHERE t.id = tr1.session_id AND tr1.action = \'bet\' ) AS bet, 
                        (SELECT IFNULL(SUM(tr2.amount), 0) FROM casino_sg_transactions tr2 WHERE t.id = tr2.session_id AND tr2.action = \'win\' ) AS win,
                        (SELECT count(0) FROM casino_sg_transactions tr3 WHERE t.id = tr3.session_id) AS bet_count,
                        t.user_id,
                        u.userName,
                        t.modified
                    FROM `casino_sg_sessions` t
                    INNER JOIN user u ON u.id = t.user_id
                    ORDER BY modified DESC
                ) user_stats
            GROUP BY user_id
            ORDER BY modified DESC
    ';
    $command = Yii::app()->db->createCommand($sql);

    $dataProvider = new CSqlDataProvider($command, array(
        'totalItemCount'=>$count,

        'pagination'=>array(
            'pageSize'=>15,
        ),
    ));


    return $dataProvider;

}

in the controller:

$model = new CasinoSgSessions('searchUserStats');
$this->render('index', array(
        'model' => $model,
));

inside the view i call it this way:

$this->widget('application.widgets.grid.CGridView', array(
    'dataProvider' => $model->searchUserStats(),
    'filter' => $model,
    'columns' => array(
        [
            'header' => 'User ID',
            'name'   => 'user_id',
            'value' => '$data->user_id',
            'htmlOptions' => array('width'=>'150px'),
        ],

    .....
    .....

i receive paginated grid without data.

spent huge amount of time and now gave up, what i did wrong ?

sql query itself works good.

PS: i cant use mysql views and create model for the view.

PPS: query will be a bit more complex, so the only way i see is using CGridView through the sql query.

in the template instead of

$data->user_id

i had to use

$data['user_id']

absolutely not expected behavior. Seems to me they didn't hear about SOLID

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM