[Yii2] SqldataProvider e Gridview filterModel

Salve ragazzi, in alcuni casi mi trovo ad utilizzare la gridview con delle query sql che estrapolano i dati da più tabelle, perdendo quindi la funzionalità dell’utilissima riga di ricerca collegata al filterModel.

Come posso in questi casi mantenere questa funzionalità?

Grazie in anticipo!

In questi casi conviene creare una vista sql e creare un model da quella vista.

Giusta considerazione, la vista non l’avevo considerata.

Immaginavo ci potesse essere la possibilità di passargli modelsearch adhoc. Chiaramente con la vista si fa prima!

Grazie

Ad ogni modo, puoi personalizzare ogni dataprovider per effettuare il filtro su ogni campo che hai definito.

In questo tutorial viene spiegato a grandi linee il da farsi: http://www.yiiframework.com/wiki/653/displaying-sorting-and-filtering-model-relations-on-a-gridview/

In sintesi estrapoli dalla tua query i campi che dovrai filtrare facendoli diventare attributi del dataprovider.

Quindi

  1. dichiari l’attributo

public $campofilter

  1. aggiungi l’attributo nei rules()

[['campofilter'], 'safe'],

  1. eventualmente definisci il sort della gridview quando si preme nella colonna

        $dataProvider->sort->attributes['campofilter'] = [

            // The tables are the ones our relation are configured to

            // in my case they are prefixed with "tbl_"

            'asc' => ['profile.rag_sociale' => SORT_ASC],

            'desc' => ['profile.rag_sociale' => SORT_DESC],

        ];



4)fondamentale aggiungi la riga FilterWhere con il tuo attributo ed il suo effetto nella query




        $query->andFilterWhere(['like', 'profile.rag_sociale', $this->campofilter])

        ;




spero possa aiutarti,

saluti