如何使用DataProvider在CGridView中显示查询结果

时间:2011-12-23 11:40:24

标签: gridview yii

这3张桌子只是我整个项目的一部分(用户,个人资料,登录)

Login.php(登录表的模型

public function topten_logins(){

    $criteria = new CDbCriteria;
    $criteria->select = 'concat(u.firstname," ",u.lastname) as Name, p.join_date as Joined, count(*) as Logins';
    $criteria->alias = 'l';
    $criteria->join = 'left join users u on (u.id = l.user_id) left join profile p on (p.user_id = l.user_id)';
    $criteria->group = 'l.user_id';
    $criteria->order = 'Logins desc';
    $criteria->limit = '10';

    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,
    ));
}

我必须在CGridView中显示它,我要显示的代码如下:

<?php $this->widget('zii.widgets.grid.CGridView', array(

    'dataProvider'=>Login::model()->topten_logins(),
    'enablePagination' => false,
    'columns'=>array(
        'Name',
        'Joined',
        'Logins',
        array(
            'class'=>'CButtonColumn',
        ),
    ),
)); ?>

我只想显示登录次数最多的十大用户。

但是它给了我错误信息:

  

未定义属性“Login.Name”。

我之前没有使用过Yii。因此,我们将非常感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

问题是您使用'as Name和Logins'进行查询。在这种情况下,您需要做的是将“名称”和“登录”定义为模型中的变量。在模型的类定义中添加

public $Name;
public $Logins; 

它应该有用。

答案 1 :(得分:0)

尝试在用户模型或模型中移动函数“public function topten_logins()”,其中包含为CGridView指定的所有列名。

否则您可以将列数组设置为

$column['name']=>get name from user table 
$column['Joined']=>get Joined from related table 
$column['Logins']=>get Logins from related table 

然后设置

'columns'=>$column

在CGridView中

相关问题