Yii Framework Forum: Problema Con Criteria - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Problema Con Criteria Rate Topic: -----

#1 User is offline   fcmsoft 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 6
  • Joined: 16-October 12

Posted 03 January 2013 - 04:52 PM

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!!!!
0

#2 User is offline   robregonm 

  • Experienced Yii Developer
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 601
  • Joined: 30-July 09
  • Location:Colombia

Posted 03 January 2013 - 05:57 PM

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.
Ricardo Obregón
LinkedIn Profile
YiiFramework en Español - http://yiiframework.co/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx, MySQL, PostgreSQL, Yii 1.x & 2.x, CanJS and more.
Follow me: @robregonm & @obregonco & @1ServerCo.
0

#3 User is offline   fcmsoft 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 6
  • Joined: 16-October 12

Posted 04 January 2013 - 07:49 AM

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?
0

#4 User is offline   robregonm 

  • Experienced Yii Developer
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 601
  • Joined: 30-July 09
  • Location:Colombia

Posted 04 January 2013 - 04:49 PM

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,
        ),

Ricardo Obregón
LinkedIn Profile
YiiFramework en Español - http://yiiframework.co/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx, MySQL, PostgreSQL, Yii 1.x & 2.x, CanJS and more.
Follow me: @robregonm & @obregonco & @1ServerCo.
0

#5 User is offline   robregonm 

  • Experienced Yii Developer
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 601
  • Joined: 30-July 09
  • Location:Colombia

Posted 04 January 2013 - 04:52 PM

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
Ricardo Obregón
LinkedIn Profile
YiiFramework en Español - http://yiiframework.co/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx, MySQL, PostgreSQL, Yii 1.x & 2.x, CanJS and more.
Follow me: @robregonm & @obregonco & @1ServerCo.
0

#6 User is offline   fcmsoft 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 6
  • Joined: 16-October 12

Posted 08 January 2013 - 12:07 PM

View Postrobregonm, on 04 January 2013 - 04:52 PM, said:

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
0

#7 User is offline   fcmsoft 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 6
  • Joined: 16-October 12

Posted 11 January 2013 - 11:12 AM

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'=>'sati-terapias-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
array('name'=>'institucion_nombre','sortable'=>'true'),
array('name'=>'contacto_nombre','sortable'=>'true'),
array('name'=>'contacto_email','sortable'=>'true'),
array('name'=>'contacto_provincia','sortable'=>'true','filter'=>SatiTerapias::model()->obtenerProvincias()),
array('name'=>'contacto_pais','sortable'=>'true','filter'=>SatiTerapias::model()->obtenerPaises()),
array('name'=>'institucion_tipo_unidad','sortable'=>'true','filter'=>array("adultos"=>"adultos","pediátrica"=>"pediatrica","neo"=>"neonatal")),
array('name'=>'soft_instalado','type'=>'boolean','sortable'=>'true','filter'=>array(0=>"No",1=>"Sí")),
array('name'=>'fecha_ultima_observacion','sortable'=>'true','filter'=>false),
array(
'header' => 'Acciones',
'class' => 'CButtonColumn',
'template'=>'{vista} {editar} {delete}',
'buttons'=>array
(
'vista' => array
(
'label'=>'Vista',
'imageUrl'=>Yii::app()->baseUrl.'/images/'. 'gr-view.png',
'url'=>'Yii::app()->createUrl("/satiTerapias/view", array("id"=>$data->id))',
),
'editar' => array
(
'label'=>'Editar',
'imageUrl'=>Yii::app()->request->baseUrl.'/images/'. 'gr-update.png',
'url'=>'Yii::app()->createUrl("/satiTerapias/update", array("id"=>$data->id))',
),
'delete' => array
(
'label'=>'Borrar',
'imageUrl'=>Yii::app()->request->baseUrl.'/images/'. 'gr-delete.png',
),
),
),
),
)); ?>


Alguna idea? Gracias de antemano.
0

#8 User is offline   fcmsoft 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 6
  • Joined: 16-October 12

Posted 22 January 2013 - 05:51 PM

:(
A nadie le ha pasado algo parecido? Una idea?
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users