Búsqueda entre fechas en Yii

En este tema les quiero mostrar como realizar búsqueda entre fechas en el GridView, en este caso voy a usar la tabla auditoria y el campo fecha_auditoria va a tener la opción para filtrar entre fechas.

335

Modelo Auditoria (Las modificaciones que se deben hacer en el modelo):


<?php
class Auditoria extends CActiveRecord
{
 public $date_first; //Agregar esta variable
 public $date_last; //Agregar esta variable

//Agregar date_first, date_last en el search en la función rules()

public function rules()
 {
 return array(
 array('fecha_auditoria', 'required'),
 array('usuario, modelo, accion', 'length', 'max'=>50),
 array('campo, camponuevovalor, campoviejovalor', 'safe'),
 array('date_first, date_last,id_auditoria, usuario, modelo, accion, fecha_auditoria, campo, camponuevovalor,campoviejovalor', 'safe', 'on'=>'search'),

);
 }

//Antes del return agregar lo siguiente en el search(), cabe recalcar que fecha_auditoria es el campo que utilizo en este ejemplo

public function search()
 {

//Esto es lo que se debe agregar

if((isset($this->date_first) && trim($this->date_first) != "") && (isset($this->date_last) && trim($this->date_last) != ""))
 $criteria->addBetweenCondition('fecha_auditoria', ''.$this->date_first.'', ''.$this->date_last.'');

return new CActiveDataProvider($this, array(
 'criteria'=>$criteria,
 ));
}

Vista auditoria/admin.php (Las modificaciones que se deben hacer en la vista admin):


//Esto se debe agregar antes del código del GridView

<?php
// this is the date picker
$dateisOn = $this->widget('zii.widgets.jui.CJuiDatePicker', array(
 /*'model'=>$model,
 'attribute' => 'date_first',*/
 'name' => 'Auditoria[date_first]',
 'value' => $model->date_first,
 'language'=>'es',
 'options'=>array(
 'showAnim'=>'fold',
 'dateFormat'=>'yy-mm-dd',
 'changeMonth' => 'true',
 'changeYear'=>'true',
 'constrainInput' => 'false',
 ),
 'htmlOptions'=>array(
 'style'=>'height:20px;width:70px;',
 ),
 ),true) . '<br> a <br> ' . $this->widget('zii.widgets.jui.CJuiDatePicker', array(
 /*'model'=>$model,
 'attribute' => 'date_last',*/
 'name' => 'Auditoria[date_last]',
 'value' => $model->date_last,
 'language'=>'es',
 'options'=>array(
 'showAnim'=>'fold',
 'dateFormat'=>'yy-mm-dd',
 'changeMonth' => 'true',
 'changeYear'=>'true',
 'constrainInput' => 'false',
 ),
 'htmlOptions'=>array(
 'style'=>'height:20px;width:70px',
 ),
 ),true);
?>

//Esto se debe agregar en el código del GridView

'id'=>'auditoria-grid',
 'type'=>'striped bordered',
 'dataProvider'=>$model->search(),
 'afterAjaxUpdate'=>"function() { //Esto es lo que hay que agregar
 jQuery('#Auditoria_date_first').datepicker(jQuery.extend({showMonthAfterYear:false}, jQuery.datepicker.regional['es'], {'showAnim':'fold','dateFormat':'yy-mm-dd','changeMonth':'true','showButtonPanel':'true','changeYear':'true','constrainInput':'false'}));
 jQuery('#Auditoria_date_last').datepicker(jQuery.extend({showMonthAfterYear:false}, jQuery.datepicker.regional['es'], {'showAnim':'fold','dateFormat':'yy-mm-dd','changeMonth':'true','showButtonPanel':'true','changeYear':'true','constrainInput':'false'}));
 }",

'filter'=>$model,

//luego se debe cambiar 'fecha_auditoria', por este codigo:

array(
 'name'=>'fecha_auditoria',
 'filter'=>$dateisOn,
 'value'=>'$data->fecha_auditoria'
 ),

Haciendo esas modificaciones ya van a tener 100% funcional la búsqueda entre fechas, para que pueden utilizar estos códigos nada más deben de adaptarle al modelo y vista admin que deseen, básicamente lo que deben de cambiar es la fecha_auditoria por el campo que deseen, también deben de cambiar (Auditoria[date_first] , Auditoria[date_last] , #Auditoria_date_first , #Auditoria_date_last) por el nombre de su modelo, eso en la vista admin.

Rodrigo Paszniuk
Rodrigo Paszniuk

Ingeniero Informático y Especialista en Docencia Universitaria con 15 años de trayectoria en la industria de software. Mi enfoque está en la arquitectura de sistemas y la formación de talento técnico en Paraguay. A través de Programacion.py, busco compartir conocimiento práctico y elevar el estándar del código en nuestra región.

Artículos: 322

5 comentarios

  1. Hola Rodrigo, primero que todo agradecerte por el tuto, completamente funcional, quisiera que me orientaras haciendo algo que creo es muy similar, pero que aun no me sale, es buscar por rango pero de codigos, tengo una columna de codigos en mi tabla, ejm: opo, tafles, etc, lo estoy haciendo con dos JuiAutoComplete que estan funcionales ps me autocompletan los codigos que tengo en mi BD, pero no he podido lograr que me filtre.

  2. Hola Rodrigo.

    Quisiera que me ayudaras con un problema que tengo al intentar hacer una consulta en yii filtrando por un campo fecha de tipo timestamp. Esta es la consulta

    $movimiento = Movimiento::model()->findByAttributes(array(‘cliente_idcliente’ => $cliente, ‘tipopublicacion_idtipopublicacion’ => $idpublicacion, ‘fechamov’ => $fecha));

    Donde $fecha es un string de este tipo «2015-04-15» y en la base de datos tengo fechamov 2015-04-15 00:00:00 pero no he podido darle formato a $fecha para que coicida con fechamov en la base de datos y me arroje resultados en la consulta, quizas puedas ayudarme, te lo agradeceria.

Deja un comentario