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
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'),
);
}
'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',
),
),
'id'=>'tslciudad-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'ciudad_id',
'ciudad_codigo',
'ciudad_nombre',
[b]array ('name'=>'id_departamento', /*supongo que en ciudad el campo de BBDD se llama id_departamento */
'value'=>'$data->departamento->departamento_nombre',
'type'=>'text',
),[/b]
array(
'class'=>'CButtonColumn',
),
),
)); ?>
Además en el metodo search del modelo Ciudad tienes que añadir algo asi:
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
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,
));
}