Как отсортировать по STAT-связи в yii?

У меня есть следующие отношения в моей модели User:

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?

2

Решение

Вы должны использовать виртуальные атрибуты в своем роде Объект 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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]