Page 1 of 1
CGridView Filtros de Busqueda con Relaciones
#1
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
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
#2
Posted 09 March 2011 - 07:27 AM
Por favor pone el codigo que usas en la vista.
En especial el código del CGridView.
En especial el código del CGridView.
Don't say what you think, think what you say
The problem is communication! Excess of communication!
The problem is communication! Excess of communication!
#3
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'),
);
}
#4
Posted 06 April 2011 - 01:07 PM
RIC 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???
#5
Posted 07 April 2011 - 01:35 PM
Hyoga, 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.
#6
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.
#7
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
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/
http://hmsegura.blogspot.com/
ASAP-As Soon As Possible
http://www.yiiframew...oc/cookbook/71/
http://hmsegura.blogspot.com/
#8
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
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
#9
Posted 23 January 2013 - 03:10 AM
hitomisan, 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
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
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.
-- If your question has been resolved, write [SOLVED] in the title of it.
-- Si tu pregunta ha sido respondida, escribe [SOLUCIONADO] en el título de la misma.
-- Se a túa pregunta foi resolta, escribe [RESOLTA] no título da mesma.
-- Si tu pregunta ha sido respondida, escribe [SOLUCIONADO] en el título de la misma.
-- Se a túa pregunta foi resolta, escribe [RESOLTA] no título da mesma.
Share this topic:
Page 1 of 1

Help














