[Yii1][RISOLTO] filtrare e ordinare i risultati per attributo virtuale

Ciao,

in un modello ho creato un attributo virtuale che indica se un record di questo modello è usato in una tabella con cui ha una relazione "listiniPrestazionis"

Nel model ho aggiunto:


private $_usataInListini = null;


        public function getUsataInListini() {

            if ($this->listiniPrestazionis){

                $this->_usataInListini = 1;

            }else{

                $this->_usataInListini = 0;

            }

            return $this->_usataInListini;

        }


        public function setUsataInListini($value) {

            $this->_usataInListini = $value;

        }

e ho messo ‘usataInListini’ anche nelle rules.

Il nuovo attributo viene correttamente mostrato in griglia con


'usataInListini'=>array(

                'header'=>'usata nei listini?',

                'name'=>'usataInListini',

                'type'=>'raw', 

                'value' => '$data->usataInListini?Yii::t(\'app\',\'Yes\'):Yii::t(\'app\', \'No\')',

                'filter' => array('0' => Yii::t('app', 'No'), '1' => Yii::t('app', 'Yes')),

                'htmlOptions' => array('style' => "text-align:center;"),

                ),

Ma la colonna "usataInListini" non è ordinabile e ricercabile.

>:(

Come devo modificare il dataprovider nel model?

ok, grazie all’aiuto del forum internazionale, ho fatto così:





if(isset($this->usedInRelationSearch))

                {


                    if($this->usedInRelationSearch === '0'){

                        

                        $criteria->with = array(

                            'someRelation' => array('joinType'=>'LEFT JOIN')

                        );

                        $criteria->addCondition("someRelation.related_model_id IS NULL");

                        $criteria->together = true;  

                    }

                      

                    else if ($this->usedInRelationSearch === '1'){

                        $criteria->with = array(

                            'someRelation' => array('joinType'=>'LEFT JOIN')

                        );

                        $criteria->addCondition("someRelation.related_model_id IS NOT NULL");

                        $criteria->group = "t.model_id";

                        $criteria->together = true;  

                    }   

                }




dove usedInRelationSearch è una variabile pubblica dichiarata nel modello.

Va dichiarata ‘safe’ per le ricerche e usata come ‘name’ nella colonna della griglia