Problema Con Criteria

Holas!

Necesito ayuda… no logro hacer andar una búsqueda avanzada. Pongo parte de mi codigo:

class SatiTerapias extends CActiveRecord

{

    public $fechadesde;


    public $fechahasta;


    public $fechas;


    public $conObservacion;


    public $sinObservacion;

public function rules()

{


	...	


		array('contacto_nombre, contacto_email, contacto_provincia, contacto_pais, institucion_nombre, soft_instalado, institucion_tipo_unidad,fechadesde,fechahasta,fechas,conObservacion,sinObservacion ', 'safe', 'on'=>'search'),


	...	


	);


}

public function relations()

{


	return array(


                 'rel_observaciones'=>array(self::HAS_MANY, 'SatiTerapiasObservaciones', 'terapia_id'),


                	);


}

public function search()

{


	


	$criteria=new CDbCriteria;


            $sort=new CSort();


            $sort->defaultOrder='t.institucion_nombre';


            


            if ($this->fechas){


                $criteria->together = true;


                $criteria->with='rel_observaciones';


              //  $criteria->compare('rel_observaciones.fecha','>='.$this->fechadesde);


                //$criteria->compare('rel_observaciones.fecha','<='.$this->fechahasta);


                $criteria->addBetweenCondition('rel_observaciones.fecha', $this->fechadesde, $this->fechahasta);


            }


            if($this->conObservacion){


                  $criteria->together = true;


                  $criteria->with='rel_observaciones';


                  $criteria->compare('rel_observaciones.observacion',$this->conObservacion,true);


            }


            if($this->sinObservacion){


                  $criteria->together = true;


                  $criteria->with='rel_observaciones';


                  $criteria->addCondition(" NOT EXISTS (select * from sati_terapias_observaciones as OT where OT.observacion LIKE '%" .$this->sinObservacion. "%' and OT.terapia_id = t.id)");


                


                // $criteria->compare('rel_observaciones.observacion','<>'.$this->sinObservacion);


            }


	


            $obj = new CActiveDataProvider($this, array(


		'criteria'=>$criteria,


                    'sort'=>$sort,


    	));


            


	return $obj;


}

El tema es que no logro hacer andar la busqueda entre fechas, ni la búsqueda "sinObservación"

No se como ver el sql generado (aunque estoy usando el CFileLogRoute), no me lo muestra en el log, creo que porque es ejecutado con AJAX… Si pongo un caracter incorrecto en medio genero un error y me tira entonces el sql pero con los parametros tipo :y0

y yo creo q el sql que se genera esta ok, pero no puedo ver si los parametros son correctos…

SOS

Ayuda!!!!

Hola fcmsoft,

No detecto errores en el search(), tal vez si nos muestra el código que está en el action (normalmente admin o index), nos podría dar una mejor idea de lo que está pasando.

Adicionalmente, no está de más, probar activando Firebug y el componente en el archivo config/main.php de la aplicación Yii:




        'log' => array(

            'class' => 'CLogRouter',

            'routes' => array(

                array(

                    'class' => 'CWebLogRoute',

                    'showInFireBug' => true,

                    'enabled' => true,

                ),

            ),

        ),



Saludos.

Hola!

gracias por contestar.

Probé con lo del FireBug y lo único que veo es que los valores se están pasando bien.

¿cómo puedo hacer para ver el SQL final completo?

El actionAdmin es:

public function actionAdmin()

{


	$model=new SatiTerapias('search');


	$model->unsetAttributes();  // clear any default values


	if(isset($_GET['SatiTerapias']))


		$model->attributes=$_GET['SatiTerapias'];


            


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


		'model'=>$model,


		));


}

Esto me rompe la cabeza… aparentemente está todo bien, pero algo no está bien… porque la grilla muestra cualquiera cuando ejecuto la búsqueda sobre esos 3 campos…

¿alguna otra idea?

Eventualmente, podría activar el log de parámetros en "components" en config/main.php, por ejemplo:




        'db' => array(

            'connectionString' => 'pgsql:host=::1 dbname=mydb',

            'username' => 'myun',

            'password' => 'mypass',

            'charset' => 'utf8',

            'enableParamLogging' => true, // Esta es la línea en cuestión

            //'enableProfiling' => true,

            'schemaCachingDuration' => 0,

        ),



Adicionalmente, sería bueno revisar que Firebug tenga activa la opción "Show XMLHttpRequests" en la pestaña "Console", para que también muestre el resultado de las solicitudes AJAX.

Saludos

Sí, tengo esto activado, pero sigo sin poder ver el sql completo q se ejecuta. ¿Alguna otra idea? Ya no se q más hacer

Gracias

Hola de nuevo, a ver si alguien me puede ayudar: al final, estoy obteniendo los resultados correctos. Lo que no funciona bien, es la paginación. Por ej. una busqueda me da 27 registros, lo cual es correcto, pero en la grilla aparece 3 de 27, y deberia mostrar de a 10. Si pongo siguiente pagina, muestra 4 registros… es como que se hace lio con la paginacion, aunque los registros q muestra son los correctos.

Vuelvo a poner como me quedo el search:

public function search()

{


	                


	$criteria=new CDbCriteria;


            $sort=new CSort();


            $sort->defaultOrder='t.institucion_nombre';


            


            if ($this->fechas){


                $desde = explode('/',$this->fechadesde);


                $this->fechadesde = $desde[2].'-'.$desde[1].'-'.$desde[0];


                $hasta = explode('/',$this->fechahasta);


                $this->fechahasta = $hasta[2].'-'.$hasta[1].'-'.$hasta[0];


                


                $criteria->together = true;


                $criteria->with='rel_observaciones';


              //  $criteria->compare('rel_observaciones.fecha','>='.$this->fechadesde);


                //$criteria->compare('rel_observaciones.fecha','<='.$this->fechahasta);


                $criteria->addBetweenCondition('rel_observaciones.fecha', $this->fechadesde, $this->fechahasta);


            }


            if($this->conObservacion){


                  $criteria->together = true;


                  $criteria->with='rel_observaciones';


                  $criteria->compare('rel_observaciones.observacion',$this->conObservacion,true);


            }


            if($this->sinObservacion){


                  $criteria->together = true;


                  $criteria->with='rel_observaciones';


                  $criteria->addCondition(" NOT EXISTS (select * from sati_terapias_observaciones as OT where OT.observacion LIKE '%" .$this->sinObservacion. "%' and OT.terapia_id = t.id)");


                


                // $criteria->compare('rel_observaciones.observacion','<>'.$this->sinObservacion);


            }


	$criteria->compare('t.contacto_nombre',$this->contacto_nombre);	


	$criteria->compare('t.contacto_provincia',$this->contacto_provincia,true);


	$criteria->compare('t.contacto_pais',$this->contacto_pais);


	$criteria->compare('t.contacto_email',$this->contacto_email,true);


	$criteria->compare('t.institucion_nombre',$this->institucion_nombre,true);


	$criteria->compare('t.soft_instalado',$this->soft_instalado);


            //$criteria->addColumnCondition(array('t.soft_instalado' => $this->soft_instalado));


	$criteria->compare('t.institucion_tipo_unidad',$this->institucion_tipo_unidad);


                 


            $obj = new CActiveDataProvider($this, array(


		'criteria'=>$criteria,


                    'sort'=>$sort,


             ));


            


	return $obj;


}

y esta es la grilla en el admin.php:

<?php $this->widget(‘zii.widgets.grid.CGridView’, array(

'id'=&gt;'sati-terapias-grid',


'dataProvider'=&gt;&#036;model-&gt;search(),


'filter'=&gt;&#036;model,


'columns'=&gt;array(


            array('name'=&gt;'institucion_nombre','sortable'=&gt;'true'),


            array('name'=&gt;'contacto_nombre','sortable'=&gt;'true'),


            array('name'=&gt;'contacto_email','sortable'=&gt;'true'),


            array('name'=&gt;'contacto_provincia','sortable'=&gt;'true','filter'=&gt;SatiTerapias::model()-&gt;obtenerProvincias()),


	array('name'=&gt;'contacto_pais','sortable'=&gt;'true','filter'=&gt;SatiTerapias::model()-&gt;obtenerPaises()),


            array('name'=&gt;'institucion_tipo_unidad','sortable'=&gt;'true','filter'=&gt;array(&quot;adultos&quot;=&gt;&quot;adultos&quot;,&quot;pediátrica&quot;=&gt;&quot;pediatrica&quot;,&quot;neo&quot;=&gt;&quot;neonatal&quot;)),


            array('name'=&gt;'soft_instalado','type'=&gt;'boolean','sortable'=&gt;'true','filter'=&gt;array(0=&gt;&quot;No&quot;,1=&gt;&quot;Sí&quot;)),


            array('name'=&gt;'fecha_ultima_observacion','sortable'=&gt;'true','filter'=&gt;false),


            array(


                    'header' =&gt; 'Acciones',


                    'class' =&gt; 'CButtonColumn',


                    'template'=&gt;'{vista} {editar} {delete}',


                    'buttons'=&gt;array


                            (


                            'vista' =&gt; array


                                    (


                                'label'=&gt;'Vista',


                                    'imageUrl'=&gt;Yii::app()-&gt;baseUrl.'/images/'. 'gr-view.png',


                                        'url'=&gt;'Yii::app()-&gt;createUrl(&quot;/satiTerapias/view&quot;, array(&quot;id&quot;=&gt;&#036;data-&gt;id))',


                                    ),


                                                                            'editar' =&gt; array


                                    (


                                'label'=&gt;'Editar',


                                    'imageUrl'=&gt;Yii::app()-&gt;request-&gt;baseUrl.'/images/'. 'gr-update.png',


                                        'url'=&gt;'Yii::app()-&gt;createUrl(&quot;/satiTerapias/update&quot;, array(&quot;id&quot;=&gt;&#036;data-&gt;id))',


                                    ),


                                                                            'delete' =&gt; array


                                    (


                                'label'=&gt;'Borrar',


                                    'imageUrl'=&gt;Yii::app()-&gt;request-&gt;baseUrl.'/images/'. 'gr-delete.png',


                                ),


                            ),


                ),


),

)); ?>

Alguna idea? Gracias de antemano.

:(

A nadie le ha pasado algo parecido? Una idea?