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!!! ![]()