Buscador Para Consultas Entre Modelos

Buenas noches chicos. Tengo una pregunta y es que necesito hacer un buscador a través de diferentes modelos, es decir, tengo 3 tablas las cuales la segunda se relaciona con la primera y la tercera con la segunda. Para cada una tengo el modelo creado y necesito hacer un buscador donde al escribir una palabra, me busque dicha palabra en cualquier modelo.

Las tablas son: Colores -> id_color, nombre_color

            Frutas -> id_frutas,nombre_fruta,id_color


            Propiedades -> id_propiedades, descripcion_propiedad, id_frutas

Muchas gracias y ojalá alguien me pueda ayudar. Así con un buscador para un solo modelo para empezar.

:)

Hola Angélica,

Una alternativa es la siguiente:

Puedes crear un modelo de formulario tal como el LoginForm o el ContactForm que se crean por defecto cuando haces una aplicación. Luego debes crear una acción en el controlador que desees y su correspondiente vista que contenga el formulario. Luego en la acción puedes capturar el envío por post de los parámetros de búsqueda y pasarlos a un método dentro de tu modelo de formulario, el cuál llevará a cabo la búsqueda en los modelos que le especifiques.

Fíjate como funciona la acción contact del SiteController, es muy similar lo que deberías hacer, solo que el procesado del request cambia.

Espero te quede claro el procedimiento.

Saludos,

Mauricio.

Hola mauricio, gracias por responder. Te comento soy nueva en yii y no estoy muy familiarizada con la programación. Tendré en cuenta tu consejo y te agradeceria enormemente si tienes algun ejemplo o tutorial para guiarme un poco mas.

:)

Buenos días, Angélica.

Lo q tienes q hacer es exactamente lo q te dice Mauricio. Voy a intentar explicárte-lo con un poco de código a ver si te aclara algo.

1- Creas tu modelo de búsqueda siguiendo como base por ejemplo el modelo ContactForm defecto:




class SearchForm extends CFormModel

{

    public $campoBusqueda1;

    public $campoBusqueda2;

    public $campoBusqueda3;

...

...


 //con sus rules, attributeLabels, métodos...

...

...




2- Puedes crear un controlador para el modelo o utilizar el SiteController. En cualquier caso deberás crear una acción en el controlador para realizar la búsqueda.




public function actionSearch()

        {



3- Dentro de esta acción deberás recoger los datos que deseas enviar filtrados.




$model=new SearchForm;


if(isset($_POST['SearchForm']))

{

  $model->attributes=$_POST['SearchForm'];

...

...

//Y aquí con los datos del modelo rellenas tus otros 3 modelos, por ejemplo:


$modelColores = Colores::model()->findByPk($model->pkColores); // Suponiendo que el formulario de búsqueda envíe una pk de colores.

...

...


//Y envías esos modelos a la vista q desees.

$this->render('searchView',array(

                                'modelColores'=>$modelColores,

                                'modelFrutas'=>$modelFrutas,

                                'modelPropiedades'=>$modelPropiedades));



Un saludo.