Hi, I have 3 tables, Clientes, Colonias and Ciudades with the next relations
Clientes
id
name
colonia_id
Colonias
id
nombre
ciudad_id
Ciudades
id
nombre
I’m displaying Clientes.id Clientes.nombre, Colonia.nombre, Ciudad.nombre and want to search with the foreign data.
On the admin page of clients generated trough crud generator (gii) I can see colonias.nombre and ciudades.nombre from each client but search doesn’t work, ¿can you help me identifying the error?
Thanks a lot for your help.
<Clients Model>
class Clientes extends CActiveRecord
{
public $colonia_search;
public $calle_search;
public $giro_search;
public $ciudad_search;
----
array('id, nombre, colonia_search, calle_search, giro_search, ciudad_search', 'safe', 'on'=>'search'),
-----
public function relations()
{
return array(
'giro' => array(self::BELONGS_TO, 'Giros', 'giro_id'),
'calle' => array(self::BELONGS_TO, 'Calles', 'calle_id'),
'colonia' => array(self::BELONGS_TO, 'Colonias', 'colonia_id'),
'ciudad'=>array(
self::HAS_ONE,'Ciudades',array('ciudad_id'=>'id'),
'through'=>'colonia'
),
);
}
------------
public function search()
{
// @todo Please modify the following code to remove attributes that should not be searched.
$criteria=new CDbCriteria;
$criteria->with = array( 'calle', 'colonia','giro','ciudad' );
$criteria->compare('id',$this->id);
$criteria->compare('nombre',$this->nombre,true);
$criteria->compare('colonia.nombre', $this->colonia_search, true );
$criteria->compare('calle.nombre', $this->calle_search, true );
$criteria->compare('giro.nombre', $this->giro_search, true );
$criteria->compare('ciudad.nombre', $this->ciudad_search, true );
$criteria->condition='baja=0';
return new CActiveDataProvider( $this, array(
'criteria'=>$criteria,
'sort'=>array(
'attributes'=>array(
'colonia_search'=>array(
'asc'=>'colonia.nombre',
'desc'=>'colonia.nombre DESC',
),'calle_search'=>array(
'asc'=>'calle.nombre',
'desc'=>'calle.nombre DESC',
),'giro_search'=>array(
'asc'=>'giro.nombre',
'desc'=>'giro.nombre DESC',
),'ciudad_search'=>array(
'asc'=>'ciudad.nombre',
'desc'=>'ciudad.nombre DESC',
),
'*',
),
),
));
}
</Clients Model>
<Colonias Model>
public function relations()
{
return array(
'clientes' => array(self::HAS_MANY, 'Clientes', 'colonia_id'),
'ciudad' => array(self::BELONGS_TO, 'Ciudades', 'ciudad_id'),
);
}
</Colonias Model>
<Ciudades Model>
public function relations()
{
return array(
'colonias' => array(self::HAS_MANY, 'Colonias', 'ciudad_id'),
);
}
</Ciudades Model>
<Finally Clients admin page>
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'clientes-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'id',
'NoCliente',
'nombre',
array( 'name'=>'calle_search', 'value'=>'$data->calle->nombre' ),
array( 'name'=>'colonia_search', 'value'=>'$data->colonia->nombre' ),
array( 'name'=>'ciudad_search', 'value'=>'$data->ciudad->nombre' ),
...
</Clients admin page>