Ziggi 5 Posted December 29, 2012 Report Share Posted December 29, 2012 Hmm, I must say it is a bit disappointing to see entire "virtual attribute" concept mostly misleading. Well, I have this inside my 'Users' model: public $fullname; {other code here - not really important} public function search() { $sort = new CSort(); $sort->attributes = array('*', 'CONCAT(surname, ", ", forename) AS fullname'); $sort->defaultOrder = array('fullname' => CSort::SORT_ASC); $criteria=new CDbCriteria; $criteria->select = array('*', 'CONCAT(surname, ", ", forename) AS fullname'); $criteria->compare('id', $this->id); $criteria->compare('login', $this->login, true); $criteria->compare('surname', $this->surname, true); $criteria->compare('forename', $this->forename, true); $criteria->compare('email', $this->email, true); $criteria->compare('CONCAT(surname, ", ", forename)', $this->fullname, true); $criteria->compare('company_id', $this->company_id); $criteria->compare('grupa', $this->grupa); $criteria->compare('active', $this->active); return new CActiveDataProvider($this, array( 'criteria'=>$criteria, 'pagination'=>array('pageSize'=>10), 'sort' => $sort, )); } Having this I have a nice working CGridView and Advanced Search pane but for whatever reason "fullname" column is not sortable. Any idea??? - I feel already exhausted fighting with this all alone... Quote Link to post Share on other sites
Ziggi 5 Posted December 29, 2012 Author Report Share Posted December 29, 2012 Here you are - I made a bug report: https://github.com/y...yii/issues/1899 Nevertheless, the workin solution is: return new CActiveDataProvider($this, array( 'criteria'=>$criteria, 'pagination'=>array('pageSize'=>10), 'sort' => array( 'attributes'=>array( 'fullname'=>array( 'asc'=>'CONCAT(surname, forename) ASC', 'desc'=>'CONCAT(surname, forename) DESC', ), '*', ), 'defaultOrder' => 'fullname ASC', ), )); Quote Link to post Share on other sites
Antonio Conte 426 Posted December 29, 2012 Report Share Posted December 29, 2012 I would say that's an acceptable "workaround". I haven't read the documentation for this, but if that solution is stated clearly, I find it both pretty and logical. I tend to think example usage of code lacks from the YII documentation, but maybe that's just me. Glad you solved it. If it's possible, you should add a guide on virtual attributes in the manual. Quote Link to post Share on other sites
Ziggi 5 Posted December 30, 2012 Author Report Share Posted December 30, 2012 Yes, this way of construction CSort objects is documented but actually I believe the problem is deeper and missing support for virtual attributes within CActiveRecord->hasAttribute() method may in fact affect virtual attributes usage in a more complex way. Anyway - I have no time to spent on this any more. I am in serious delay already! Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.