Ayuda Con Cgridview

Hola tengo el siguiente problema

son 3 tablas en cuestión , empresa, documento y bodega

En la vista admin de documento solo quiero mostrar los documentos de la persona que esta logeada que al momento de

iniciar sesion en la cookie seteo esto $this->setState(‘cod_empresa’,$user->cod_empresa); y lo recupero asi

$cod=Yii::app()->user->getState(‘cod_empresa’); , hasta ahí vamos bien pero nose como hacer el filtrado, intente en el search del modelo ,intente en la vista admin ocupando un find pero solo me arroja un valor y con findAll no me funcionaba ,ayuda porfavor .

$sql=“SELECT cod_bodega FROM documento WHERE cod_bodega =(SELECT e.cod_bodega FROM empresa e WHERE e.cod_empresa=’$cod’)”;

esta variable le pasaba al findAllBySql pero tampoco funcionaba

luego al find le pasaba un valor directo asi $sql="SELECT * FROM documento WHERE cod_bodega = 1"; pero arroja solo un valor y con findAll no arrojaba nada

Buenas.

Supongo q cada la tabla documento tendrá una clave foránea ‘cod_empresa’, no? Si es así tienes q hacer esto en el ‘search()’ de tu modelo ‘documento’:




$cod = -1;


if(Yii::app()->user->hasState('cod_empresa'))

    $cod = Yii::app()->user->getState('cod_empresa');


$criteria->compare('cod_empresa', $cod, false);



Y cargar tu grid en la vista ‘admin’ de ‘documento’:




...

'dataProvider'=>$model->search(),

...



Un saludo.

Yo lo haría de otra manera, no usaría server states, sino que sobre escribiria el CWebUser y no sólo le incluiría el ID sino que ademas le pondría el código de la bodega como atributo "al Web.

Luego siguiendo las instrucciones de lagogz haría lo mismo pero con la siguiente variación:




$criteria->compare('cod_empresa', Yii::app()->user->cod_empresa, false);



Saludos

+1