我有一個奇怪的行爲,我將嘗試解釋。Yii奇怪的行爲:CGridView +組+
我正在構建一個報告系統,每個用戶都可以讓他們的個人資料,圖片或消息被其他用戶報告。
在後端我想顯示CGridView其中每個用戶出現在一行中的總次數已被報告。
要做到這一點,我將group
添加到條件,它的效果很好。
但是,如果我想任何相關領域過濾視圖,我要補充with
的標準和它的工作好與過濾或搜索,但結果總顯示不正確,顯示顯示1-2的15個結果當它應該顯示顯示1-2的2結果在報表中我有15行,但只有兩個用戶,也添加了一個不存在的分頁。
型號/ Report.php
public function relations()
{
return array(
'reported' => array(self::BELONGS_TO, 'User', 'reported_id'),
);
}
public function search()
{
$criteria = new CDbCriteria();
$criteria->select = array(
'*',
'count(*) as reports_count',
);
$criteria->group = 't.reported_id';
$criteria->with = array('reported');
return new CActiveDataProvider($this, array(
'criteria' => $criteria,
'sort'=>array(
'attributes'=>array(
'status_search'=>array(
'asc'=>'reported.user_status_id',
'desc'=>'reported.user_status_id DESC',
),
'reports_count' => array(
'asc' => 'reports_count ASC',
'desc' => 'reports_count DESC',
),
'*',
),
),
));
}
更新:我找到了解決辦法使用連接,而不是與和選擇我需要的字段,而不是選擇所有的人都用*:
$criteria->select = array(
't.id, t.reported_id',
'count(*) as reports_count',
);
$criteria->group = 't.reported_id';
$criteria->join = 'LEFT JOIN user u on u.id = t.reported_id';
我有一個類似的問題,只有相反的方式。 'CGridView'顯示的結果比尋呼機少,我最終放了一個很大的限制。最終,這可能是'Yii' bug – adamors