Admin Crud Dont Search On Relation

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>

:rolleyes: I repair the problem deleting this line


$criteria->condition='baja=0';

but now I dont know how to exclude the clientes with baja field equal to 1 :( .

baja<>1