Dubbio Su Relation E Utilizzo Di Filtro In Una Gridview Con Metodo Search()

Salve a tutti,

vi espongo il mio dubbio.

ho una relazione impostata di questo tipo:




'stato'=>array(self::HAS_MANY, 'StatoProgetto', 'progetto_id','order'=>'createtime DESC'),

'stato_attuale'=>array(self::HAS_ONE, 'StatoProgetto', 'progetto_id','order'=>'createtime DESC'),



rappresenta una tabella di stato. Con la relazione di tipo HAS_ONE prendo i valori dell’ultimo stato presente in tabella.

Nella mia Gridview, renderizzo i valori che mi interessa sapere dei vari progetti, e insieme a questi lo stato attuale in cui verte il progetto in questo modo:




array(

	'name'=>'stato_att',

	'value'=>'$data->stato_attuale->stato->stato',

	'filter'=>Stato::model()->getStato(),

),



tutto va benone, tranne il filtro che il suo lo fa! ma non come vorrei io.

Mettiamo caso che un progetto ha come stato attuale: APPROVATO. Se io filtro i progetti con stato APPROVATO, ok lo vedo, ma se io imposto il filtro su stato PRESENTATO (ad esempio), mi compare anche il progetto che ha come stato attuale APPROVATO, perchè chiaramente nella tabella degli Stati esiste quell’id di stato richiesto con il filtro.

Come fare? Mi sono spiegato chiaramente?

Grazie a tutti.

Per questo tipo di problema ci sono diverse soluzioni. Io in genere aggiungo dei metodi pubblici al model. Nel tuo caso probabilmente farei qualche cosa di simile:




    class MioModel extends CActiveRecord

    {

        public function getCertiValori()

        {

            return MioModel::model()->findAll(array(

                'stato' => StatoProgetto::APPROVATO,

            ));

        }

    }



Non risolve il tuo problema nello specifico, ma potrebbe aiutarti a trovare una soluzione.

Grazie sensorario per la risposta,

si queste soluzioni le utilizzo già per altri scopi, ma purtroppo in questo caso specifico non posso.

Perchè se io cercassi tutti i record con stato APPROVATO ovviamente lui me li restituirebbe tutti,

Nel mio caso specifico, il filtro dovrebbe agire solo sull’ultimo stato inserito, e non su tutti.

posso inserire qualche criteria… non lo so…

Era proprio quello che volevo dire: aggiungi criteria per ottenere il tuo set di risultati preciso.