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!!!!
Page 1 of 1
Problema Con Criteria
#2
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:
Saludos.
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
YiiFramework en Español - http://yiiframework.co/ - http://yiiframeworkenespanol.org/ - Yii Code Generator for Bootstrap
http://obregon.co/
PHP 5.3+, nginx 1.2, MySQL, MariaDB, PerconaDB, PostgreSQL, Yii 1.x-dev.
Follow me: @robregonm & @obregonco.
YiiFramework en Español - http://yiiframework.co/ - http://yiiframeworkenespanol.org/ - Yii Code Generator for Bootstrap
http://obregon.co/
PHP 5.3+, nginx 1.2, MySQL, MariaDB, PerconaDB, PostgreSQL, Yii 1.x-dev.
Follow me: @robregonm & @obregonco.
#3
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?
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?
#4
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
YiiFramework en Español - http://yiiframework.co/ - http://yiiframeworkenespanol.org/ - Yii Code Generator for Bootstrap
http://obregon.co/
PHP 5.3+, nginx 1.2, MySQL, MariaDB, PerconaDB, PostgreSQL, Yii 1.x-dev.
Follow me: @robregonm & @obregonco.
YiiFramework en Español - http://yiiframework.co/ - http://yiiframeworkenespanol.org/ - Yii Code Generator for Bootstrap
http://obregon.co/
PHP 5.3+, nginx 1.2, MySQL, MariaDB, PerconaDB, PostgreSQL, Yii 1.x-dev.
Follow me: @robregonm & @obregonco.
#5
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
Saludos
Ricardo Obregón
YiiFramework en Español - http://yiiframework.co/ - http://yiiframeworkenespanol.org/ - Yii Code Generator for Bootstrap
http://obregon.co/
PHP 5.3+, nginx 1.2, MySQL, MariaDB, PerconaDB, PostgreSQL, Yii 1.x-dev.
Follow me: @robregonm & @obregonco.
YiiFramework en Español - http://yiiframework.co/ - http://yiiframeworkenespanol.org/ - Yii Code Generator for Bootstrap
http://obregon.co/
PHP 5.3+, nginx 1.2, MySQL, MariaDB, PerconaDB, PostgreSQL, Yii 1.x-dev.
Follow me: @robregonm & @obregonco.
#6
Posted 08 January 2013 - 12:07 PM
robregonm, 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
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
#7
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.
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.
Share this topic:
Page 1 of 1

Help












