Yii 搜索表单按日期从到条件 [英] Yii search form by date from to criteria

查看:18
本文介绍了Yii 搜索表单按日期从到条件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试创建搜索表单,以按日期、从 - 到标准列出数据库中的数据.我是 Yii 的初学者,接下来是我的任务:

我有模型:

public $from_date;公开 $to_date;

规则:

公共函数规则(){返回数组(数组('AppUserID','length', 'max'=>11),数组('AUUsername','length', 'max'=>45),array('AUActionTime','type','type'=>'datetime','datetimeFormat'=>'yyyy-mm-dd hh:mm:ss'),数组('AppUserID,AUUsername, from_date, to_date', 'safe', 'on'='search'),);}公共函数attributeLabels(){返回数组('ActionID' =>'ID','AU用户名' =>'Naziv korisnika','AUActionTime' =>'Vrijeme akcije',);}公共功能搜索(){$criteria=新的CDbCriteria;$criteria->compare('APUsername',$this->AUUsername,true);$criteria->compare('AUActionTime',$this->AUActionTime,true);$Date = date('yyyy-mm-dd hh:mm:ss',strtotime($this->AUActionTime));$startOfDay = $Date .'2014-03-12 00:00:00';$endOfDay = $Date .'2014-03-15 23:59:59';$criteria->addBetweenCondition('AUActionTime', strtotime($startOfDay), strtotime($endOfDay));返回新的 CActiveDataProvider($this, array('标准'=>$标准,));}

我有下一个控制器:

公共函数 actionListaexample(){$model = 新示例;$this->layout='column1';if(isset($_POST['示例'])){$model->attributes=$_POST['示例'];if($model->save())$this->redirect(array('view','id'=>$model->AppUserID));}//渲染视图文件 'protected/views/site/index.php'//使用默认布局 'protected/views/layouts/main.php'$this->render('listaexample',array('model'=>$model));}

我有下一个视图,用于显示数据的标准列表:

clientScript->registerScript('search', "$('.search-button').click(function(){$('.search-form').toggle();返回假;});<br/>$('.search-form 表单').submit(function(){$('#application-grid').yiiGridView('更新', {数据:$(this).serialize()});返回假;});");?><?php echo CHtml::link('Napredna pretraga','#',array('class'=>'search-button'));?><div class="search-form" style="display:none"><?php $this->renderPartial('_search1',array('模型'=>$模型,));?>

<?php//$gridDataProvider = new CArrayDataProvider(array(//array('id'=>'ActionID', 'name'=>'ActionName'),////));$this->widget('bootstrap.widgets.TbGridView',array('type'=>'striped bordered condensed','id'=''应用程序网格','dataProvider'=>$model->search(),'模板'=>"{items}",//'过滤器'=>$模型,'列'=>数组(//'动作ID','AU用户名','AUActionTime',大批('class'=''bootstrap.widgets.TbButtonColumn','模板'=>'{更新}{查看}{删除}','按钮'=>数组('更新'=>数组('可见'=>'假',),'视图'=>数组('可见'=>'真',),'删除'=>数组('可见'=>'假',),),'htmlOptions'=>array('style'=>'width: 50px'),),),));?>

这是我使用搜索输入字段进行搜索的视图:

clientScript->registerCoreScript('jquery');?><?php/* @var $this ApplicationController *//* @var $model 应用程序 *//* @var $form CActiveForm */?><div class="宽表单"><?php $form=$this->beginWidget('CActiveForm', array('action'=> Yii::app()->createUrl($this->route),'方法'=>'获取','enableAjaxValidation'=>false,//$model->search(),));?><div class="row"><?php echo $form->label($model,'AUUsername');?><?php echo $form->textField($model,'AUUsername',array('size'=>45,'maxlength'=>45));?>

<div class="row"><?php echo $form->label($model,'AUActionTime');?><?php//echo $form->textField($model,'AUActionTime');?><?php echo $form->dateField($model,'AUActionTime');?>

<div class="行按钮"><?php echo CHtml::submitButton('Search');?>

<?php $this->endWidget();?>

我只是尝试在输入字段中输入有关日期的任何格式 yyyy-mm-dd 我知道可以使用格式,并与数据库现有数据进行比较.

我写了很多代码,但任务不是让高级用户复杂化.那只是搜索表单,但在我的项目中它不起作用.感谢您的帮助

解决方案

search()函数中$startOfDay$endOfDay包含2 个日期相互连接,这将产生不正确的输出格式,如 2014-05-07 14:35:122014-03-12 00:00:00.strtotime 无法正确解析该值.

公共函数search(){$criteria=新的CDbCriteria;//...$Date = date('yyyy-mm-dd hh:mm:ss',strtotime($this->AUActionTime));$startOfDay = $Date .'2014-03-12 00:00:00';$endOfDay = $Date .'2014-03-15 23:59:59';$criteria->addBetweenCondition('AUActionTime', strtotime($startOfDay), strtotime($endOfDay));//...}

I try to create search form to list data from database by date, from - to criteria. I'm Beginer in Yii, And my task is next:

I have model:

public $from_date;
public $to_date;

Rules:

public function rules()
    {
        return array(                 
                array('AppUserID','length', 'max'=>11),
                array('AUUsername','length', 'max'=>45),


                array('AUActionTime','type','type'=>'datetime','datetimeFormat'=>'yyyy-mm-dd hh:mm:ss'),


                array('AppUserID,AUUsername, from_date, to_date', 'safe', 'on'=>'search'),

        );
    }

public function attributeLabels()
    {
        return array(
                'ActionID' => 'ID',
                'AUUsername' => 'Naziv korisnika',
                'AUActionTime' => 'Vrijeme akcije',
         );
    }

public function search()
    {

        $criteria=new CDbCriteria;
        $criteria->compare('APUsername',$this->AUUsername,true);

        $criteria->compare('AUActionTime',$this->AUActionTime,true);

        $Date = date('yyyy-mm-dd hh:mm:ss',strtotime($this->AUActionTime));
        $startOfDay = $Date . '2014-03-12 00:00:00';
        $endOfDay = $Date . '2014-03-15 23:59:59';
        $criteria->addBetweenCondition('AUActionTime', strtotime($startOfDay) , strtotime($endOfDay) ); 



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

I have next controller:

public function actionListaexample()
    {


            $model = new Example;

            $this->layout='column1';
            if(isset($_POST['Example']))
        {
                     $model->attributes=$_POST['Example'];


            if($model->save())
                 $this->redirect(array('view','id'=>$model->AppUserID));
        }
        // renders the view file 'protected/views/site/index.php'
        // using the default layout 'protected/views/layouts/main.php'
        $this->render('listaexample',array('model'=>$model));


       }

And I have next view for standard list where data should be presented:

<?php
Yii::app()->clientScript->registerScript('search', "
$('.search-button').click(function(){
    $('.search-form').toggle();
    return false;
});<br />
$('.search-form form').submit(function(){
    $('#application-grid').yiiGridView('update', {
        data: $(this).serialize()
    });
    return false;
});
");
?>

<?php echo CHtml::link('Napredna pretraga','#',array('class'=>'search-button')); ?>
<div class="search-form" style="display:none">
<?php $this->renderPartial('_search1',array(
    'model'=>$model,
)); ?>
</div>

<?php 
//$gridDataProvider = new CArrayDataProvider(array(
    //array('id'=>'ActionID', 'name'=>'ActionName'),
//    
//));
 $this->widget('bootstrap.widgets.TbGridView',array(
    'type'=>'striped bordered condensed',
    'id'=>'application-grid',
    'dataProvider'=>$model->search(),
    'template'=>"{items}",
    //'filter'=>$model,
    'columns'=>array(

        //'ActionID',
          'AUUsername',
              'AUActionTime',


        array(
            'class'=>'bootstrap.widgets.TbButtonColumn',
                        'template'=>'{update}{view}{delete}',
                        'buttons'=>array(
                                        'update'=>array(
                                                        'visible'=>'false',
                                                ),
                                        'view'=>array(
                                                        'visible'=>'true',
                                                ),
                                        'delete'=>array(
                                                        'visible'=>'false',
                                                ),
                                        ),

                        'htmlOptions'=>array('style'=>'width: 50px'),
        ),
    ),
));
?>

This is view for my search with search input fields:

<?php Yii::app()->clientScript->registerCoreScript('jquery'); ?>
<?php
/* @var $this ApplicationController */
/* @var $model Application */
/* @var $form CActiveForm */
?>

<div class="wide form">

<?php $form=$this->beginWidget('CActiveForm', array(
    'action'=>Yii::app()->createUrl($this->route),
    'method'=>'get',
        'enableAjaxValidation'=>false,
        //$model->search(),



)); ?>



    <div class="row">
        <?php echo $form->label($model,'AUUsername'); ?>
        <?php echo $form->textField($model,'AUUsername',array('size'=>45,'maxlength'=>45)); ?>
    </div>





   <div class="row">

        <?php echo $form->label($model,'AUActionTime'); ?>
        <?php //echo $form->textField($model,'AUActionTime'); ?>

                <?php echo $form->dateField($model,'AUActionTime'); ?>
    </div>




    <div class="row buttons">
        <?php echo CHtml::submitButton('Search'); ?>
    </div>

<?php $this->endWidget(); ?>

</div>

I just try to make input fields where I put info about date any format yyyy-mm-dd i know work with formats, and to make comparation with database exist data.

I put realy much code but task is not to complicate for advanced users. That is only search form but in my project it don't work. Thank you for any help

解决方案

In the search() function $startOfDay and $endOfDay contains 2 dates concatenated to each other, which will produce an incorrect output format like 2014-05-07 14:35:122014-03-12 00:00:00. That value won't parse right with strtotime.

public function search()
{
    $criteria=new CDbCriteria;
    // ...
    $Date = date('yyyy-mm-dd hh:mm:ss',strtotime($this->AUActionTime));
    $startOfDay = $Date . '2014-03-12 00:00:00';
    $endOfDay = $Date . '2014-03-15 23:59:59';
    $criteria->addBetweenCondition('AUActionTime', strtotime($startOfDay) , strtotime($endOfDay) ); 
    // ...
}

这篇关于Yii 搜索表单按日期从到条件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
其他开发最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆