Hola compañeros, tengo una duda que seguro que es super fácil, pero que me está siendo un quebradero de cabeza.
Lo que quiero, es que salga en el "listData" la lista de provincias, y al seleccionar la provincia, solo se muestren dichas provincias.
Tengo la siguiente relacción de tablas:
Model - Provincia
public function relations()
{
return array(
'alumnos' => array(self::HAS_MANY, 'Alumno', 'provinciaID'),
);
}
public function search()
{
// Warning: Please modify the following code to remove attributes that
// should not be searched.
$criteria=new CDbCriteria;
$criteria->compare('ID',$this->ID);
$criteria->compare('name',$this->name,true);
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
Model - Alumno
public function relations()
{
return array(
'laboral' => array(self::BELONGS_TO, 'Laboral', 'laboralID'),
'provincia' => array(self::BELONGS_TO, 'Provincia', 'provinciaID'),
'alumnoCursos' => array(self::BELONGS_TO, 'AlumnoCurso', 'alumnoID'),
);
}
public function search()
{
// Warning: Please modify the following code to remove attributes that
// should not be searched.
$criteria=new CDbCriteria;
$criteria->compare('ID',$this->ID);
$criteria->compare('name',$this->name,true);
$criteria->compare('surname',$this->surname,true);
$criteria->compare('age',$this->age);
$criteria->compare('email',$this->email,true);
$criteria->compare('phone',$this->phone,true);
$criteria->compare('laboralID',$this->laboralID);
$criteria->compare('provinciaID',$this->provinciaID, true);
return new CActiveDataProvider($this, array(
'pagination'=>array(
'pageSize' => Yii::app()->params->pagesize,
),
'criteria'=>$criteria,
));
}
Model - AlumnoCurso
public function relations()
{
return array(
'alumno' => array(self::BELONGS_TO, 'Alumno', 'alumnoID'),
'curso' => array(self::BELONGS_TO, 'Curso', 'cursoID'),
'date' => array(self::BELONGS_TO, 'Alumno', 'alumnoID'),
);
}
public function search()
{
$criteria=new CDbCriteria;
$criteria->compare('ID',$this->ID);
$criteria->compare('alumnoID',$this->alumnoID);
$criteria->compare('cursoID',$this->cursoID);
$criteria->compare('status',$this->status);
$criteria->compare('date',$this->date);
$criteria->compare('avisado',$this->avisado);
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'sort' => array(
'defaultOrder' => 'status ASC, ID DESC',
),
'pagination'=>array(
'pageSize'=>50,
),
));
}
Vies el Admin de inscripcion
<?php $this->widget('bootstrap.widgets.TbGridView', array(
'id'=>'inscripciones',
'type'=>'striped bordered condensed',
'dataProvider'=>$model->search(),
'filter'=>$model,
'template'=>"{items} {pager} {summary}",
'rowCssClassExpression'=>'$data->status ? "" : "red"',
'columns'=>array(
...
array(
'header'=>'Provincia',
'name'=>'provinciaID',
'filter'=>CHtml::listData(Alumno::model()->findAll(), 'ID', '$model->alumno->provinciaID'),
'value'=>'$data->alumno->provinciaID==0?"No seleccionado":$data->alumno->provincia->name',
'headerHtmlOptions'=>array(
'style'=>'width:9%;text-align:left !important;',
),
),
...
Controlador de inscripcion
public function actionAdmin()
{
$model=new AlumnoCurso('search');
$model->unsetAttributes(); // clear any default values
if(isset($_GET['AlumnoCurso']))
$model->attributes=$_GET['AlumnoCurso'];
$this->render('admin',array(
'model'=>$model,
));
}
Para no hacerlo lioso, he intentado reducir el codigo introducion a lo exencial, pero si me dejo algo necesario, decirmelo