2011-12-23 21 views
2

這3個表中CGridView顯示查詢結果都只是我的整個項目(用戶配置文件,登錄)如何使用DataProvider的

的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

問題是你打的是 '作爲名稱和登錄' 查詢。在這種情況下,您需要做的是將「名稱」和「登錄名」定義爲模型中的變量。在你的模型的類定義中添加

public $Name; 
public $Logins; 

它應該工作。

+0

非常感謝,我爲這3條線從最後14小時起就搞亂了。它運行良好。 – 2011-12-23 12:19:27

+0

很高興我可以幫助:) – redGREENblue 2011-12-23 12:30:10

+0

嘿@redGREENblue,你會讓我知道如何應用排序嗎? – 2011-12-28 08:37:38

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 

然後在CGridView

設置

'columns'=>$column 

+0

感謝您的幫助,但它沒有奏效,否則我無法清楚地理解它..從@redGreenblue的其他建議工作簡單,只是告訴我在哪裏設置列數組? (在函數內部或其他地方) – 2011-12-23 12:22:54

相關問題