[Solucionado] Criterio De Búsqueda Entre 3 Modelos

Hola a todos!

  • Tengo los modelos A, B y C.

  • A tiene una relación BELONGS_TO con B.

  • B tiene una relación BELONGS_TO con C.

Ejemplo: A (Persona) -> B (Ciudad) -> C (País)

¿Cómo puedo mostrar un dropdown en la búsqueda avanzada dentro de la vista admin del modelo A que filtre por id de C?

Probé creando una relación de este tipo (en el modelo A):


'relacionAC' => array(self::BELONGS_TO, 'C', 'id'),

y dentro de la función search() de A con esto:




...

        $criteria->together = true;

        $criteria->with = array('relacionAC');

        $criteria->compare('relacionAC.id', $this->relacionAC_id);

...



¿Cómo paso desde _search.php el valor del id?

Gracias por anticipado :D

En tu modelo A creas una propiedad por ejemplo




public function getIdC()

{

  return $this->relacion_ab->relacionbc->id_c;

}



relacion_ab = la relación de tu modelo A con tu modelo B.

relacion_bc = la relación de tu modelo D con tu modelo C.

Y en tu dropdonwlist usas esta propiedad.

Un saludo.

Lo solucioné… lo escribo por si a alguien le sirve:

  1. declarar el atributo relación como ‘safe’ y ‘on’=>‘search’

  2. colocar el campo en la búsqueda así:




<?php echo $form->dropDownListRow($model, 'relacionAB', ...opciones..., array('prompt'=>''));?>




        $criteria->together = true;

        $criteria->with = array('atributo.relacionAB.relacionAC');

        $criteria->compare('relacionAB.id', $this->relacionAB);

        $criteria->compare('relacionAC.id', $this->relacionAC);



Saludos.