Gridview no filtra

hola, estoy mostrando los datos de mi gridview segun el usuario logueado de esta forma:




<?php


namespace app\models;


use Yii;

use yii\base\Model;

use yii\data\ActiveDataProvider;

use app\models\Planificacion;


/**

 * PlanificacionSearch represents the model behind the search form about `app\models\Planificacion`.

 */

class PlanificacionSearch extends Planificacion

{

    public $orga_siglas;

    public $entidad_nombre;

    public $dic_desc;

    /**

     * @inheritdoc

     */

    public function rules()

    {

        return [

            [['id_planificacion', 'orga_fk', 'entidad_fk', 'dic_fk'], 'integer'],

            [['dic_desc','orga_siglas','entidad_nombre','plan_cod', 'plan_fecha', 'plan_desc', 'plan_acc_extra', 'plan_orden', 'plan_reg_por'], 'safe'],

        ];

    }


    /**

     * @inheritdoc

     */

    public function scenarios()

    {

        // bypass scenarios() implementation in the parent class

        return Model::scenarios();

    }


    /**

     * Creates data provider instance with search query applied

     *

     * @param array $params

     *

     * @return ActiveDataProvider

     */

    public function search($params)

    {

        if(\Yii::$app->authManager->checkAccess(Yii::$app->user->getId(),'managePR'))       

        {

            $PR="SELECT 

              planificacion.*

            FROM

              planificacion

              INNER JOIN dic ON (planificacion.dic_fk = dic.id_dic)

            WHERE

              dic_siglas = 'CP PR'";

        $query = Planificacion::findBySql($PR);

        }

        if(\Yii::$app->authManager->checkAccess(Yii::$app->user->getId(),'manageART'))       

        {

            $ART="SELECT 

              planificacion.*

            FROM

              planificacion

              INNER JOIN dic ON (planificacion.dic_fk = dic.id_dic)

            WHERE

              dic_siglas = 'CP ART'";

        $query = Planificacion::findBySql($ART);

        }

        if(\Yii::$app->authManager->checkAccess(Yii::$app->user->getId(),'manageMAY'))       

        {

            $MAY="SELECT 

              planificacion.*

            FROM

              planificacion

              INNER JOIN dic ON (planificacion.dic_fk = dic.id_dic)

            WHERE

              dic_siglas = 'CP MAY'";

        $query = Planificacion::findBySql($MAY);

        }

       if(\Yii::$app->authManager->checkAccess(Yii::$app->user->getId(),'manageLH'))       

        {

            $LH="SELECT 

              planificacion.*

            FROM

              planificacion

              INNER JOIN dic ON (planificacion.dic_fk = dic.id_dic)

            WHERE

              dic_siglas = 'CP LH'";

        $query = Planificacion::findBySql($LH);

        }

        if(\Yii::$app->authManager->checkAccess(Yii::$app->user->getId(),'manageMTZ'))       

        {

            $MTZ="SELECT 

              planificacion.*

            FROM

              planificacion

              INNER JOIN dic ON (planificacion.dic_fk = dic.id_dic)

            WHERE

              dic_siglas = 'CP MTZ'";

        $query = Planificacion::findBySql($MTZ);

        }

        if(\Yii::$app->authManager->checkAccess(Yii::$app->user->getId(),'manageCFG'))       

        {

            $CFG="SELECT 

              planificacion.*

            FROM

              planificacion

              INNER JOIN dic ON (planificacion.dic_fk = dic.id_dic)

            WHERE

              dic_siglas = 'CP CFG'";

        $query = Planificacion::findBySql($CFG);

        }

        if(\Yii::$app->authManager->checkAccess(Yii::$app->user->getId(),'manageVC'))       

        {

            $VC="SELECT 

              planificacion.*

            FROM

              planificacion

              INNER JOIN dic ON (planificacion.dic_fk = dic.id_dic)

            WHERE

              dic_siglas = 'CP VC'";

        $query = Planificacion::findBySql($VC);

        }

        if(\Yii::$app->authManager->checkAccess(Yii::$app->user->getId(),'manageSS'))       

        {

            $SS="SELECT 

              planificacion.*

            FROM

              planificacion

              INNER JOIN dic ON (planificacion.dic_fk = dic.id_dic)

            WHERE

              dic_siglas = 'CP SS'";

        $query = Planificacion::findBySql($SS);

        }

        if(\Yii::$app->authManager->checkAccess(Yii::$app->user->getId(),'manageCA'))       

        {

            $CA="SELECT 

              planificacion.*

            FROM

              planificacion

              INNER JOIN dic ON (planificacion.dic_fk = dic.id_dic)

            WHERE

              dic_siglas = 'CP CA'";

        $query = Planificacion::findBySql($CA);

        }

        if(\Yii::$app->authManager->checkAccess(Yii::$app->user->getId(),'manageCMG'))       

        {

            $CMG="SELECT 

              planificacion.*

            FROM

              planificacion

              INNER JOIN dic ON (planificacion.dic_fk = dic.id_dic)

            WHERE

              dic_siglas = 'CP CMG'";

        $query = Planificacion::findBySql($CMG);

        }

        if(\Yii::$app->authManager->checkAccess(Yii::$app->user->getId(),'manageLT'))       

        {

            $LT="SELECT 

              planificacion.*

            FROM

              planificacion

              INNER JOIN dic ON (planificacion.dic_fk = dic.id_dic)

            WHERE

              dic_siglas = 'CP LT'";

        $query = Planificacion::findBySql($LT);

        }

        if(\Yii::$app->authManager->checkAccess(Yii::$app->user->getId(),'manageHOG'))       

        {

            $HOG="SELECT 

              planificacion.*

            FROM

              planificacion

              INNER JOIN dic ON (planificacion.dic_fk = dic.id_dic)

            WHERE

              dic_siglas = 'CP HOG'";

        $query = Planificacion::findBySql($HOG);

        }

        if(\Yii::$app->authManager->checkAccess(Yii::$app->user->getId(),'manageGRM'))       

        {

            $GRM="SELECT 

              planificacion.*

            FROM

              planificacion

              INNER JOIN dic ON (planificacion.dic_fk = dic.id_dic)

            WHERE

              dic_siglas = 'CP GRM'";

        $query = Planificacion::findBySql($GRM);

        }

        if(\Yii::$app->authManager->checkAccess(Yii::$app->user->getId(),'manageSC'))       

        {

            $SC="SELECT 

              planificacion.*

            FROM

              planificacion

              INNER JOIN dic ON (planificacion.dic_fk = dic.id_dic)

            WHERE

              dic_siglas = 'CP SC'";

        $query = Planificacion::findBySql($SC);

        }

        if(\Yii::$app->authManager->checkAccess(Yii::$app->user->getId(),'manageGTM'))       

        {

            $GTM="SELECT 

              planificacion.*

            FROM

              planificacion

              INNER JOIN dic ON (planificacion.dic_fk = dic.id_dic)

            WHERE

              dic_siglas = 'CP GTM'";

        $query = Planificacion::findBySql($GTM);

        }

        if(\Yii::$app->authManager->checkAccess(Yii::$app->user->getId(),'manageMEIJ'))       

        {

            $MEIJ="SELECT 

              planificacion.*

            FROM

              planificacion

              INNER JOIN dic ON (planificacion.dic_fk = dic.id_dic)

            WHERE

              dic_siglas = 'CP MEIJ'";

        $query = Planificacion::findBySql($MEIJ);

        }

        if(\Yii::$app->authManager->checkAccess(Yii::$app->user->getId(),'manageDASNAP'))       

        {

            $DASNAP="SELECT 

              planificacion.*

            FROM

              planificacion

              INNER JOIN dic ON (planificacion.dic_fk = dic.id_dic)

            WHERE

              dic_siglas = 'DIC DASNAP'";

        $query = Planificacion::findBySql($DASNAP);

        }

        if(\Yii::$app->authManager->checkAccess(Yii::$app->user->getId(),'manageDIC_SSP'))       

        {

            $DIC_SSP="SELECT 

              planificacion.*

            FROM

              planificacion

              INNER JOIN dic ON (planificacion.dic_fk = dic.id_dic)

            WHERE

              dic_siglas = 'DIC SSP'";

        $query = Planificacion::findBySql($DIC_SSP);

        }

        if(\Yii::$app->authManager->checkAccess(Yii::$app->user->getId(),'manageDIC_TCS'))       

        {

            $DIC_TCS="SELECT 

              planificacion.*

            FROM

              planificacion

              INNER JOIN dic ON (planificacion.dic_fk = dic.id_dic)

            WHERE

              dic_siglas = 'DIC TCS'";

        $query = Planificacion::findBySql($DIC_TCS);

        }

        if(\Yii::$app->authManager->checkAccess(Yii::$app->user->getId(),'manageDIC_ICI'))       

        {

            $DIC_ICI="SELECT 

              planificacion.*

            FROM

              planificacion

              INNER JOIN dic ON (planificacion.dic_fk = dic.id_dic)

            WHERE

              dic_siglas = 'DIC ICI'";

        $query = Planificacion::findBySql($DIC_ICI);

        }

        if(\Yii::$app->authManager->checkAccess(Yii::$app->user->getId(),'manageDIC_OGSB'))       

        {

            $DIC_OGSB="SELECT 

              planificacion.*

            FROM

              planificacion

              INNER JOIN dic ON (planificacion.dic_fk = dic.id_dic)

            WHERE

              dic_siglas = 'DIC OGSB'";

        $query = Planificacion::findBySql($DIC_OGSB);

        }

        if(\Yii::$app->authManager->checkAccess(Yii::$app->user->getId(),'manageDIC_SA'))       

        {

            $DIC_SA="SELECT 

              planificacion.*

            FROM

              planificacion

              INNER JOIN dic ON (planificacion.dic_fk = dic.id_dic)

            WHERE

              dic_siglas = 'DIC SA'";

        $query = Planificacion::findBySql($DIC_SA);

        }

        if(\Yii::$app->authManager->checkAccess(Yii::$app->user->getId(),'manageUsers'))       

        {            

           $query = Planificacion::find();

        }        

        

        $dataProvider = new ActiveDataProvider([

            'query' => $query,

        ]);

        

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

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

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

        'asc' => ['planificacion.orga_fk' => SORT_ASC],

        'desc' => ['planificacion.orga_fk' => SORT_DESC],

    ];

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

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

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

        'asc' => ['planificacion.entidad_fk' => SORT_ASC],

        'desc' => ['planificacion.entidad_fk' => SORT_DESC],

    ];

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

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

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

        'asc' => ['planificacion.dic_fk' => SORT_ASC],

        'desc' => ['planificacion.dic_fk' => SORT_DESC],

    ];


        $this->load($params);


        if (!$this->validate()) {

            // uncomment the following line if you do not want to any records when validation fails

            // $query->where('0=1');

            return $dataProvider;

        }

        

        $query->joinWith(['orgaFk','entidadFk','dicFk']);




        $query->andFilterWhere(['like', 'plan_cod', $this->plan_cod])

            ->andFilterWhere(['like', 'plan_desc', $this->plan_desc])

            ->andFilterWhere(['like', 'plan_fecha', $this->plan_fecha])

            ->andFilterWhere(['like', 'n_orga.orga_siglas', $this->orga_siglas])

            ->andFilterWhere(['like', 'plan_acc_extra', $this->plan_acc_extra])

            ->andFilterWhere(['like', 'dic.dic_desc', $this->dic_desc])

            ->andFilterWhere(['like', 'entidad.entidad_nombre', $this->entidad_nombre])

            ->andFilterWhere(['like', 'plan_orden', $this->plan_orden])

            ->andFilterWhere(['like', 'plan_reg_por', $this->plan_reg_por]);


        return $dataProvider;

    }

}




cosa que me funciona perfectamente, pero ahora ninguna columnas de las que contienen la consulta me filtra, solamente lo hace cdo los muestro todos y no cdo los acoto, que puede ser??

Creo que tu problema está mas relacionado con el widget que con la búsqueda de valores. Échales un vistazo a la documentación del widget, y asegúrate de que le pasas un modelo en la propiedad adecuada: http://www.yiiframework.com/doc-2.0/yii-grid-gridview.html#$filterModel-detail

yo le estoy pasando un modelo lo unico que estoy haciendo es una consulta para definir que datos podrá ver cadaa usuario, esta es la unica forma en que se me ocurrió si conoces otra por favor hazmela saber, pq mi necesidad es que cada usuario vea una informacion distinta segun su rol

Buenas.

Nos é si será eso, pero en el código que nos muestras, el dataProvider no lo estás creando con los filtros.

De hecho, despues de rellenar el dataProvider, añades los filtros a la variable $query pero esa query no la usas para nada. Por lo que siempre coges todos los registros sin filtrar.

Vamos, que esto:




$query->joinWith(['orgaFk','entidadFk','dicFk']);




        $query->andFilterWhere(['like', 'plan_cod', $this->plan_cod])

            ->andFilterWhere(['like', 'plan_desc', $this->plan_desc])

            ->andFilterWhere(['like', 'plan_fecha', $this->plan_fecha])

            ->andFilterWhere(['like', 'n_orga.orga_siglas', $this->orga_siglas])

            ->andFilterWhere(['like', 'plan_acc_extra', $this->plan_acc_extra])

            ->andFilterWhere(['like', 'dic.dic_desc', $this->dic_desc])

            ->andFilterWhere(['like', 'entidad.entidad_nombre', $this->entidad_nombre])

            ->andFilterWhere(['like', 'plan_orden', $this->plan_orden])

            ->andFilterWhere(['like', 'plan_reg_por', $this->plan_reg_por]);




debería de estar antes de pasar la $query a la creación del provider.

Un saludo.

hola, ya he resuelto el problema gracias a todos por sus opiniones, no se si es la forma mas optima pero es la que me funciona, en lugar de poner la condicion en el ModelSearch, la puse dentro del actionIndex de la controladora asi:




 public function actionIndex()

    {

        $searchModel = new Modelo01Search();

        if(Yii::$app->user->can('admin')||Yii::$app->user->can('Visor'))       

        {

             $searchModel = new Modelo01Search();

        }

        else

        {

            if(Yii::$app->user->can('Pinar_del_Rio')||Yii::$app->user->can('Visor_PR'))       

            {

                 $searchModel->dic_fk = 'CP PR';

            }

            if(Yii::$app->user->can('Artemisa')||Yii::$app->user->can('Visor_ART'))

            {

                 $searchModel->dic_fk = 'CP ART';

            }

        } 

        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);


        return $this->render('index', [

            'searchModel' => $searchModel,

            'dataProvider' => $dataProvider,

        ]);

    }



lo correcto quizas no sea, pero si me permite mostrar en el grid los datos segun el usuario logueado y filtra de mil maravillas