[Risolto] Cgridview: Aggiungere La Ricerca Su Un Campo Collegato

Tabella 1: Users (si, sempre quella… )

Tabella 2: Groups

Uno User appartiene ad un unico Group

da qui ho impostato la relation




'gruppo' => array(self::BELONGS_TO, 'GruppiDiServizio', 'gruppoId'),



Ho impostato la label




'gruppo.denominazione' => 'Gruppo Di Servizio',



Nella view admin ho impostato la colonna




'columns'=>array(

   ....

   'gruppo.denominazione',

   ....



E fino qui ho che la lista funziona… la label è corretta, e il campo mostra il nome del gruppo. Ok

Solo che la CGridView NON ha il box di ricerca come per gli altri campi … come si aggiunge !?

Dovrei imparare per la precisione 2 cose:

  • 1: come aggiungere una semplice ricerca ‘a mano’, visto che il model è stato esteso dopo la creazione del crud

  • 2: come effettuare tramite il nuovo textbox la ricerca sul campo collegato, quindi non per id, ma per denominazione gruppo.

Insomma, devo aggiungere il box che manca dove c’è il cerchio rosso… spero di essermi spiegato

Sto provando a seguire questo tutorial [English], e magari è utile anche a qualcun’altro:

AGGIORNAMENTO: dato che questa guida prevede una nomenclatura particolare delle colonne, mentre io uso lo standard oggetto.campo, sto ancora impazzendo a capire come diavolo farla funzionare … se modifico la nomenclatura dei campi, poi non mi funziona più l’ordinamento !

Devo solo poter fare una ricerca su un campo collegato, sia nella advanced view, sia nella ricerca ‘per colonna’ dell CGridView !

Ci sarà un sistema standard, no ?

per cambiare nome alla colonna o cmq personalizzarla devi scriverla come:




array('header'=>'Nome colonna','name'=>'nomecampo'..); e così via



per il search prova a modificare nel model la funzione search()

e i relativi criteria.

grazie st4nny per la risposta…

mi chiedevo se nessuno di voi ha mai avuto la necessità di fare la ricerca da una gridView in un campo collegato… se si, come avete fatto ? Sono due giorni che provo ad aggiungere dei compare, ad usare addSearchCriteria, etc… senza alcun risultato se non delle CDbException e degli errori SQL …

Per fare la ricerca devi eseguire le seguenti operazioni:

  1. Aggiungere la proprieta’ filter alla colonna, questa cosa non la puoi fare con la nomenclatura breve, devi per forza fare un array:



array(

    'header'=>'Nome colonna',

    'name'=>'gruppo.descrizione',

    'filter'=>CHtml::activeTextField($model, 'gruppo_descr'),

);



Questa cosa ti crea un textbox collegata alla proprita’ gruppo del model.

Se non hai la proprieta’, avrai un errore, devi andare nel model e creare la proprieta’:


public $gruppo_descr;



Aggiungerla ai safe attrubute per la search


public function rules()

{

  return array(

      ...

      array('.., gruppo_descr', 'safe', 'on'=>'search')

  );



E aggiungere la condizione nella funzione search:


public function search()

{


  $criteria->with=array('gruppo');

  $criteria->compare('gruppo.descrizione', $this->gruppo_descr);

Hai risolto?

Grazie Zaccaria il tuo post mi è stato utile.

Per aggiungere il campo nel componente zii.widgets.grid.CGridView ho messo semplicemente





array( 'header'=>'Citta','name'=>'cittas_search', 'value'=>'$data->cittas->nome' ),

		array(

			'class'=>'CButtonColumn',

		),



vuoi dire che così ti funziona la ricerca sul campo collegato ? anche il filtro ‘in colonna’ della CGridView ?

Certo che funziona.

Ricordati di apportare le modifiche al model come indicato da Zaccaria oppure nel wiki.

Potresti mettere Risolto