Yii Framework Forum: CGridView - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

CGridView Filtros de Busqueda con Relaciones Rate Topic: -----

#1 User is offline   Kmilo 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 1
  • Joined: 26-February 11

Posted 05 March 2011 - 05:47 PM

Hola a Todos

estot comenzando mi viaje po rle mundo de YII famework, hasta el momento estoy super contento con la gran cantidad de componentes y codigos generados a partir del CRUD me parece formidable,

Resulta que genere una tabla Departamento y otra Ciudad y el modelo de Ciudad tiene una relacion con Departamento, de BELONGS_TO y tengo dificultades con la vista de Search generada por el CRUD ya que estuve revisando como mostrar el nombre del Departamento en vez del id de la ciudad, pero ya revise par foros he hice lo que decia pero aun el filtro de la vista de Admin sigue si funcionar si alguien me puede colaborar les agradeceria ernormemente
0

#2 User is offline   PoL 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 506
  • Joined: 05-November 08
  • Location:Buenos Aires, Argentina

Posted 09 March 2011 - 07:27 AM

Por favor pone el codigo que usas en la vista.
En especial el código del CGridView.
Don't say what you think, think what you say
The problem is communication! Excess of communication!
0

#3 User is offline   RIC BERNAL 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 7
  • Joined: 08-March 11
  • Location:Tunja/Colombia

Posted 10 March 2011 - 10:26 AM

TENGO EL MISMO PROBLEMA SE ME DESAPARECIÓ EL FILTRO  


<?php $this->widget('zii.widgets.grid.CGridView', array(
	'id'=>'tslciudad-grid',
	'dataProvider'=>$model->search(),
	'filter'=>$model,
	'columns'=>array(
		'ciudad_id',
		'ciudad_codigo',
		'ciudad_nombre',
		'departamento.departamento_nombre', //NOMBRE DE LA RELACIÓN ENTRE LAS DOS TABLAS EN EL MODELO Y NOMBRE DEL CAMPO QUE SE MUESTRA DE LA TABLA DEPARTAMENTO, ANTES ESTE CAMPO ESTABA DEPARTAMENTO_ID[/color] 
		array(
			'class'=>'CButtonColumn',
		),
	),
)); ?>

//---------------- RELACIÓN DE LAS TABLAS

	public function relations()
	{
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
			'departamento' => array(self::BELONGS_TO, 'Tsldepartamento', 'departamento_id'),
			'tusmpersos' => array(self::HAS_MANY, 'Tusmperso', 'ciudad_id'),
		);
	}

0

#4 User is offline   Hyoga 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 1
  • Joined: 24-March 11

Posted 06 April 2011 - 01:07 PM

View PostRIC BERNAL, on 10 March 2011 - 10:26 AM, said:

TENGO EL MISMO PROBLEMA SE ME DESAPARECIÓ EL FILTRO  


<?php $this->widget('zii.widgets.grid.CGridView', array(
	'id'=>'tslciudad-grid',
	'dataProvider'=>$model->search(),
	'filter'=>$model,
	'columns'=>array(
		'ciudad_id',
		'ciudad_codigo',
		'ciudad_nombre',
		'departamento.departamento_nombre', //NOMBRE DE LA RELACIÓN ENTRE LAS DOS TABLAS EN EL MODELO Y NOMBRE DEL CAMPO QUE SE MUESTRA DE LA TABLA DEPARTAMENTO, ANTES ESTE CAMPO ESTABA DEPARTAMENTO_ID[/color] 
		array(
			'class'=>'CButtonColumn',
		),
	),
)); ?>

//---------------- RELACIÓN DE LAS TABLAS

	public function relations()
	{
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
			'departamento' => array(self::BELONGS_TO, 'Tsldepartamento', 'departamento_id'),
			'tusmpersos' => array(self::HAS_MANY, 'Tusmperso', 'ciudad_id'),
		);
	}




Me pasa lo mismo, pudiste solucionarlo???
0

#5 User is offline   rparra 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 6
  • Joined: 25-January 11

Posted 07 April 2011 - 01:35 PM

View PostHyoga, on 06 April 2011 - 01:07 PM, said:

Me pasa lo mismo, pudiste solucionarlo???


En la vista tienes que cambiar:

<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'tslciudad-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'ciudad_id',
'ciudad_codigo',
'ciudad_nombre',
'departamento.departamento_nombre', //NOMBRE DE LA RELACIÓN ENTRE LAS DOS TABLAS EN EL MODELO Y NOMBRE DEL CAMPO QUE SE MUESTRA DE LA TABLA DEPARTAMENTO, ANTES ESTE CAMPO ESTABA DEPARTAMENTO_ID[/color]
array(
'class'=>'CButtonColumn',
),
),
)); ?>


por

<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'tslciudad-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'ciudad_id',
'ciudad_codigo',
'ciudad_nombre',
array ('name'=>'id_departamento', /*supongo que en ciudad el campo de BBDD se llama id_departamento */
'value'=>'$data->departamento->departamento_nombre',
'type'=>'text',
),

array(
'class'=>'CButtonColumn',
),
),
)); ?>


Además en el metodo search del modelo Ciudad tienes que añadir algo asi:

$criteria->with =array('departamento');
$criteria->addSearchCondition('departamento.departamento_nombre', $this->id_departamento);

Es más o menos lo que hay que hacer, afinalo en función de tu código y nombre de los atributos del modelo.

Saludos.
0

#6 User is offline   Fran1978 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 13-June 11

Posted 07 July 2011 - 01:42 AM

Yo tenía el mismo problema. Ayer estuve toda la tarde intentando solucionarlo y no pude. Menos mal que encontré este post. rparra, muchas gracias.
0

#7 User is offline   gallego123 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 535
  • Joined: 11-August 09
  • Location:Argentina

Posted 10 July 2011 - 07:45 AM

Solo para agregar que también se puede ordenar por esa columna relacionada

en este post hay un ejemplo:

http://www.yiiframew...dpost__p__48109

saludos
KISS - Keep It Simple Stupid
ASAP-As Soon As Possible
http://www.yiiframew...oc/cookbook/71/
0

#8 User is offline   hitomisan 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 4
  • Joined: 22-January 13

Posted 22 January 2013 - 04:35 PM

Holas soy nuevo en el tema YII framework llege a probar las opciones propuestas por rparra y me llego a funcionar todo bien, pero mi consulta esta en que pasa si quiero mostrar otro campo de las la misma tabla departamento es decir que aparte del departamento_nombre mostrar también departamento_ abreviatura

En la vista tendría que ser:

<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'tslciudad-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'ciudad_id',
'ciudad_codigo',
'ciudad_nombre',

array ('name'=>'id_departamento',
'value'=>'$data->departamento->departamento_nombre',
'type'=>'text',
),

array ('name'=>'id_departamento',
'value'=>'$data->departamento->departamento_ abreviatura ,
'type'=>'text',
),

array(
'class'=>'CButtonColumn',
),
),
)); ?>


Y en el metodo search del modelo Ciudad tienes que añadir algo asi:

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

$criteria->addSearchCondition('departamento.departamento_nombre', $this->id_departamento);

$criteria->addSearchCondition('departamento.departamento_ abreviatura', $this->id_departamento);


Al probar esta opción los filtros no me llega a funcionar debido a que el nombre de las componente es id_departamento , alguien me puede ayudar :rolleyes:

0

#9 User is offline   lagogz 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 30-November 12
  • Location:Galiza

Posted 23 January 2013 - 03:10 AM

View Posthitomisan, on 22 January 2013 - 04:35 PM, said:

Holas soy nuevo en el tema YII framework llege a probar las opciones propuestas por rparra y me llego a funcionar todo bien, pero mi consulta esta en que pasa si quiero mostrar otro campo de las la misma tabla departamento es decir que aparte del departamento_nombre mostrar también departamento_ abreviatura

En la vista tendría que ser:

<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'tslciudad-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'ciudad_id',
'ciudad_codigo',
'ciudad_nombre',

array ('name'=>'id_departamento',
'value'=>'$data->departamento->departamento_nombre',
'type'=>'text',
),

array ('name'=>'id_departamento',
'value'=>'$data->departamento->departamento_ abreviatura ,
'type'=>'text',
),

array(
'class'=>'CButtonColumn',
),
),
)); ?>


Y en el metodo search del modelo Ciudad tienes que añadir algo asi:

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

$criteria->addSearchCondition('departamento.departamento_nombre', $this->id_departamento);

$criteria->addSearchCondition('departamento.departamento_ abreviatura', $this->id_departamento);


Al probar esta opción los filtros no me llega a funcionar debido a que el nombre de las componente es id_departamento , alguien me puede ayudar :rolleyes:



Supongamos que tenemos las tablas:

departamentos
IdDepartamento
NombreDepartamento
AbreviaturaDepartamento

ciudades
IdCiudad
IdDepartamento
NombreCiudad

Para mostrar NombreDepartamento y AbreviaturaDepartamento en un CGridView de por ejemplo la vista admin de Ciudades, se haría de la siguiente forma:

1- Definimos dos variables (propiedades) en la clase del modelo de Ciudades:

class Ciudades extends CActiveRecord
{
    public $NombreDepartamento; 
    public $AbreviaturaDepartamento;


2- Añadimos estas propiedades en la función rules del modelo Ciudades para que se pueda buscar por ellas:

    public function rules()
    {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
                    array('IdDepartamento, NombreCiudad', 'required'),
                    array('IdDepartamento', 'numerical', 'integerOnly'=>true),
                    // The following rule is used by search().
                    // Please remove those attributes that should not be searched.
                    array('NombreCiudad, NombreDepartamento, AbreviaturaDepartamento', 'safe', 'on'=>'search'),
        );
    }


3- Las relaciones del modelo Ciudades:

public function relations()
    {
        // NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
        return array(
                    'FK_Departamentos_Ciudades' => array(self::BELONGS_TO, 'Departamentos', 'IdDepartamento'),
        );
    }


4- Preparamos la función search del modelo Ciudades:

public function search()
    {
        // Warning: Please modify the following code to remove attributes that
        // should not be searched.

        $criteria=new CDbCriteria;
        $sort=new CSort;                                            

        $sort->defaultOrder='NombreCiudad ASC, FK_Departamentos_Ciudades.NombreDepartamento ASC,          FK_Departamentos_Ciudades.AbreviaturaDepartamento';                   
        $sort->attributes=array(
                                'NombreCiudad'=>array(
                                    'asc'=>'NombreCiudad ASC, 
                                            FK_Departamentos_Ciudades.NombreDepartamento ASC,          
                                            FK_Departamentos_Ciudades.AbreviaturaDepartamento ASC',
                                    'desc'=>'NombreCiudad DESC, 
                                            FK_Departamentos_Ciudades.NombreDepartamento ASC,   
                                            FK_Departamentos_Ciudades.AbreviaturaDepartamento ASC',
                                ),
                                'NombreDepartamento'=>array(
                                    'asc'=>'FK_Departamentos_Ciudades.NombreDepartamento ASC,          
                                            FK_Departamentos_Ciudades.AbreviaturaDepartamento ASC,
                                            NombreCiudad ASC',
                                    'desc'=>'FK_Departamentos_Ciudades.NombreDepartamento DESC,          
                                             FK_Departamentos_Ciudades.AbreviaturaDepartamento ASC,
                                             NombreCiudad ASC',
                                ),
                                'AbreviaturaDepartamento'=>array(
                                    'asc'=>'FK_Departamentos_Ciudades.AbreviaturaDepartamento ASC,          
                                            FK_Departamentos_Ciudades.NombreDepartamento ASC,
                                            NombreCiudad ASC',
                                    'desc'=>'FK_Departamentos_Ciudades.AbreviaturaDepartamento DESC,          
                                             FK_Departamentos_Ciudades.NombreDepartamento ASC,
                                             NombreCiudad ASC',
                                ),
        );                                                          

        $criteria->with = array('FK_Departamentos_Ciudades');   
        $criteria->compare('NombreCiudad',$this->NombreCiudad,true);       
        $criteria->compare('FK_Departamentos_Ciudades.NombreDepartamento',$this->NombreDepartamento,true);
        $criteria->compare('FK_Departamentos_Ciudades.AbreviaturaDepartamento',
                          $this->AbreviaturaDepartamento,true);

        return new CActiveDataProvider($this, array(
                                                    'criteria'=>$criteria,
                                                    'sort'=>$sort,
        ));
    }


5- Y por último configuramos el CGridView:

$this->widget('zii.widgets.grid.CGridView', array(
                        'id'=>'id-grid',
                        'dataProvider'=>$model->search(),
                        'filter'=>$model,
                        'columns'=>array(
                                  'NombreCiudad',
                                  array(
                                        'name'=>'NombreDepartamento', 
                                        'value'=>'$data->FK_Departamentos_Ciudades->NombreDepartamento' 
                                       ),
                                  array(
                                        'name'=>'AbreviaturaDepartamento', 
                                        'value'=>'$data->FK_Departamentos_Ciudades->AbreviaturaDepartamento' 
                                       ),
                                        array('class'=>'CButtonColumn'),
                                    ),
    ));


Un saludo.
-----------------------------------------------------------------------------------------------
------------------------------- VISITEN FOCUCHASART --------------------------------
-----------------------------------------------------------------------------------------------
0

#10 User is offline   hitomisan 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 4
  • Joined: 22-January 13

Posted 28 January 2013 - 02:23 PM

muchas gracias
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users