Saludos amantes del Yii.
Hoy vengo con un problema que no me deja dormir tranquilo y es lo siguiente. En mi proyecto controlo un sistema para la gestion de perros. Ahora en este sistema necesito filtrar en la vista admin los criadores y los padres de los perros. Donde por supuesto Criadores son un modelo aparte pero los padres pertenecen al mismo modelo de perros. Aqui muestro lo que tengo:
en el Modelo Perro:
Relaciones
public function relations()
{
return array(
'criador' => array(self::BELONGS_TO, 'Asociados', 'criador_id'),
'perroPadre' => array(self::BELONGS_TO, 'Perro', 'perroPadre_id' ),
);
}
Aqui mi funcion Search
public function search()
{
$criteria=new CDbCriteria;
$criteria->compare('id',$this->id);
$criteria->compare('nombre_per',$this->nombre_per,true);
$criteria->compare('sexo',$this->apellido,true);
//etc otros compare del modelo
$criteria->with=array('criador','perroPadre'); //aqui uno las dos relaciones que necesito para filtrar en mi vista admin
$criteria->addSearchCondition('LOWER(criador.ci)', strtolower($this->criador_id)); //aqui instancio el criador
$criteria->addSearchCondition('LOWER(perroPadre.cod)', strtolower($this->perroPadre_id), true); //aqui instancio el padre
en mi vista admin
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'perro-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'id',
'cod',
array(
'name'=>'sexo_per',
'value'=> 'Perro::getSexoOption($data->sexo_per)',
'filter'=>array(1=>'Macho', 2=>'Hembra'),
),
array(
'name'=>'color',
'value'=> 'Perro::getColorOption($data->color)',
'filter'=>CHtml::listData(Perro::getColorOptions(),'id', 'title'),
),
array('name'=>'criador_id',
'value'=>'$data->criador->ci',
),
array(
'name' => 'perroPadre_id',//esta es la importante que es el elemento relacionado
'value' => '$data->perroPadre->cod',
),
Hasta ahi todo perfecto corre bien incluso filtra bien por criador y perroPadre el problema donde esta que cuando voy a filtrar por alguna otra columna. me muestra el siguente error.
Error 500: CDbCommand falló al ejecutar la sentencia SQL: SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'sexo_per' in where clause is ambiguous
Lo mismo con color o cualquier otra columna. por supuesto que entiendo que perroPadre es un objeto del mismo tipo que perro es decir tienen el mismo modelo y los mismos atributos, asi que cuando haga el search no va a saber la consulta con cual de los perros es y por eso me dice que es ambigua la consulta. he leido algo sobre poner alias pero igual lo que he intentado poner no me sirve y sigue sin funcionarme. Asi que por favor si alguien tiene un post que hable de este tema o puede darme una mano para arreglar este error, se lo agradesco de antemano.