Tengo los siguientes modelos:
Proyectos, DirectoresProyectos, Docentes y Personas
Proyectos corresponde a la tabla proyectos (de mi base de datos)
DirectoresProyectos corresponde a la tabla directores_proyectos (de mi base de datos)
Docentes corresponde a la tabla docentes (de mi base de datos)
Personas corresponde a la tabla personas (de mi base de datos)
Los mismos están relacionados entre sí de la siguiente manera:
class Proyectos extends PActiveRecord
{
public $nombre_director;
public function relations()
{
return array(
'directoresProyectos' => array(self::BELONGS_TO, 'DirectoresProyectos', 'directores_proyectos_id'),
);
}
}
class DirectoresProyectos extends PActiveRecord
{
public function relations()
{
return array(
'docentes' => array(self::BELONGS_TO, 'Docentes', 'docentes_id'),
'proyectos' => array(self::HAS_MANY, 'Proyectos', 'directores_proyectos_id'),
);
}
}
class Docentes extends PActiveRecord
{
public function relations()
{
return array(
'directoresProyectoses' => array(self::HAS_MANY, 'DirectoresProyectos', 'docentes_id'),
'personas' => array(self::BELONGS_TO, 'Personas', 'personas_id'),
);
}
}
class Personas extends PActiveRecord
{
public function relations()
{
return array(
'docentes' => array(self::HAS_MANY, 'Docentes', 'personas_id'),
);
}
}
O sea, los proyectos tienen un director, ese director es un docente y ese docente es una persona. No se si se entiende
Las tablas tiene más campos pero solo les detallé los que permiten las relaciones.
El problema que tengo es que no se como hacer el "$criteria" dentro de "function search() del model Proyectos" para que en el "CGridView" de mi vista "admin" me permita buscar los directores por su nombre y apellido (sin un filter), o sea, que uno ingrese el nombre o apellido en el input de búsqueda de la vista admin y me filtre los proyectos por "nombres" o "apellidos" de los directores.
En el CGridView de la vista admin, muestro los nombres y apellidos de la siguiente manera (concatenados, ya que nombre y apellido son campos diferentes de mi tabla personas):
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'proyectos-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
array(
'name'=>'nombre_director',
'value'=>'$data->directoresProyectos->docentes->personas->nombre." ".$data->directoresProyectos->docentes->personas->apellido',
'htmlOptions'=>array('style'=>'width:150px;'),
'headerHtmlOptions'=>array('style'=>'width:150px;text-align:center;'),
),
),
));
He probado poner así el criteria pero me sale el siguiente error:[color="#FF0000"] Trying to get property of non-object[/color]
public function search()
{
$criteria=new CDbCriteria;
$criteria->compare('nombre_director',$this->directoresProyectos->docentes->personas->nombre." ".$this->directoresProyectos->docentes->personas->apellido,true);
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
si el criteria lo comento, la vista funciona perfectamente pero no anda el buscador de nombre y apellido
alguna idea??,
gracias por su ayuda!!!