这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。因此,我们将非常感谢您的帮助。
答案 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中