2014-10-09 54 views
2

我有關係,因爲在我的用戶模型如下:如何在yii中按STAT關係排序?

return array(
     'images' => array(self::HAS_MANY, 'Images', 'owner_id'), 
     'imagesCount' => array(self::STAT, 'Images', 'owner_id', 'condition' => 'approved = 1'), 
     'server' => array(self::BELONGS_TO, 'Servers', 'server_id'), 
    ); 

用戶表通過owner_id相關圖像表。

圖像模式有關係,如:

return array(
     'imageVotes' => array(self::HAS_MANY, 'ImageVotes', 'image_id'), 
     'imageTags' => array(self::HAS_MANY, 'ImageTags', 'image_id'), 
     'owner' => array(self::BELONGS_TO, 'Users', 'owner_id'), 
     'server' => array(self::BELONGS_TO, 'Servers', 'server_id'), 
    ); 

我想計算數量最多他們上傳的圖片的基礎上的傑出貢獻者。

什麼是它的CDbCriteria或CActiveDataProvider排序順序?

回答

1

你需要CActiveDataProvider

你的排序對象使用虛擬屬性

您的數據提供者應該是這樣的

$activeDataProvider = CActiveDataProvider($userModel, array(
      'criteria' => $criteriaObject, 
      'sort' => array(
       'defaultOrder'=>array('imgCount'), 
       'attributes'=>array('imgCount'=> 
        array('asc'=>'(SELECT COUNT(id) FROM images WHERE owner_id = t.id)', // t.id or modelName.id 
          'desc'=>'(SELECT COUNT(id) FROM images WHERE owner_id = t.id) DESC', 
          'label'=>'Images Count', 
          'default'=>'desc', 
        )), 
       ) 
     )); 
    } 

是指看到CSort文檔來了解屬性和關係屬性如何虛擬,可以使用作爲您的排序元素DataProviders