xyber
(Pl Young)
1
I have been searching the forums and just can’t find a solution to this.
I am trying to sort a Gallery by the number of images in it. I have a Gallery table and Images table.
// Gallery model
public function relations()
{
return array(
'user' => array(self::BELONGS_TO, 'User', 'owner_id'),
'images' => array(self::HAS_MANY, 'GallImg', 'gid'),
'imgCount' => array(self::STAT, 'GallImg', 'gid'),
);
}
and in the controller I do
$crit = new CDbCriteria(array("with" => "imgCount"));
$pages = new CPagination(Gallery::model()->count($crit));
$pages->route = "gall/index";
$pages->pageSize = SAGD::STANDARD_LIST_SIZE;
$pages->setCurrentPage($page-1);
$pages->applyLimit($crit);
$sort = new CSort('Gallery');
$sort->multiSort = false;
$sort->attributes = array('imgCount' => 'imgCount',);
$sort->defaultOrder = 'imgCount ASC';
$sort->applyOrder($crit);
$galls = Gallery::model()->findAll($crit);
which fails with error …
CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'imgCount' in 'order clause'
toabi
(Birmili)
2
I have a simmilar problem. I want to sort a CList by statistical queries. (How) did you solve this problem?
toabi
(Birmili)
3
I solved it like that:
$sort = new CSort('Thing');
$sort->attributes =array(
'points' => array(
'asc'=>'numberOfPoints ASC',
'desc'=>'numberOfPoints DESC',
)
);
$dataProvider = new CActiveDataProvider('Thing', array(
'criteria'=>array(
'select' => 't.*, COUNT(point.id) AS numberOfPoints',
'join' => 'LEFT JOIN points_table point ON point.thing_id = t.id',
'condition' => 'published_at IS NOT NULL',
'group' => 't.id',
),
'sort'=>$sort,
'pagination'=>array('pageSize' => 3,)
));
and in the view:
$this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_listEntry',
'sortableAttributes'=>array(
'points',
),
));
rathodvg3
(Rathodvg3)
4
Thanks a lot. Its very helpful for me as I am implementing this first time. 
The Sorting works for me. But the filter does not work. Any solution please…