按YII框架中的用户,位置和日期范围分组

问题描述 投票:0回答:2

有人可以帮助我如何使用日期范围(create_date)并按user_id和位置分组数据?

我输入字段user_id,location和daterange,排序结果恰好发生在日期范围内。我多次尝试修复控制器,但结果仍然相同。

如果我只输入user_id字段并仅在user_id和位置上输入CGridView上的位置和日期范围字段排序,则日期范围保持随机顺序。

下面是模型,控制器和视图

在模型中建模我的变量

 public $from_date;
 public $to_date;
      ....
 public function search()
        {
            $criteria=new CDbCriteria;


            $criteria->compare('user_id',$this->user_id);
            $criteria->compare('location',$this->location,true);
            $criteria->compare('satisfy_val',$this->satisfy_val,true);
            $criteria->compare('create_date',$this->create_date,true);
            /* $criteria->mergeWith($this->dateRangeSearchCriteria('create_date',$this->create_date
            )); */
            if(!empty($this->from_date) && empty($this->to_date)){
                $criteria->condition="create_date >= '$this->from_date'";
            }elseif(!empty($this->to_date) && empty($this->from_date)){
                $criteria->condition="create_date <= '$this->to_date'";
            }elseif(!empty($this->to_date) && !empty($this->from_date)){
                $criteria->condition="create_date >= '$this->from_date' and create_date<= '$this->to_date'";
            }

            return new CActiveDataProvider($this, array(
                'criteria'=>$criteria,
                'sort'=>array('defaultOrder'=>array('user_id DESC','create_date DESC')),
            ));
        }

这是我的控制器

public function actionAdmin()
    {
        $model=new Satisfact('search');
        /* $model->unsetAttributes();  // clear any default values */
        if(isset($_GET['Satisfact'])){
            /* $model->attributes=$_GET['Satisfact']; */
            $model->user_id=$_GET['Satisfact']['user_id'];
            $model->lokasi=$_GET['Satisfact']['location'];          
            $model->from_date=$_GET['Satisfact']['from_date'];
            $model->to_date=$_GET['Satisfact']['to_date'];

        }
            $this->render('admin',array(
            'model'=>$model,
        ));


    }
...............

和我的看法

<div class="wide form">

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



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

    <div class="row">
        <?php echo $form->labelEx($model,'user_id'); ?>
        <?php $_u = User::model()->findAll();
                  echo CHtml::activeDropDownList(
                        $model,'user_id',
                        CHtml::listData($_u,'id','username'),
                        array('prompt'=>'',) //empty is aliases FOR ALL user
                    );
               ?>
    </div>
    <div="row">
    <?php echo $form->labelEx($model,'location'); ?>
        <?php $lo_u = Location::model('Location')->findAll('id');
                  echo CHtml::activeDropDownList(
                        $model,'location',
                        CHtml::listData($lo_u,'location','location'),
                        array('prompt'=>'',)
                    );
               ?>
    </div>

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

    <div class="column">
        <?php echo $form->label($model,'create_date'); ?>
        <?php //echo $form->textField($model,'create_date'); ?>
        <?php 
        echo "From : ";
            $this->widget('zii.widgets.jui.CJuiDatePicker',
            array(
            'name'=>'Satisfact[from_date]',
            'options'=>array('dateFormat'=>'yy-mm-dd',),            

            ));
        echo " To : ";
            $this->widget('zii.widgets.jui.CJuiDatePicker',
            array(
            'name'=>'Satisfact[to_date]',
            'options'=>array('dateFormat'=>'yy-mm-dd',),            

            )); 


        ?>
    </div>

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

<?php $this->endWidget(); ?>
mysql web-applications yii grouping date-range
2个回答
0
投票

你的代码:

if(!empty($this->from_date) && empty($this->to_date)){
                $criteria->condition="create_date >= '$this->from_date'";
            }elseif(!empty($this->to_date) && empty($this->from_date)){
                $criteria->condition="create_date <= '$this->to_date'";
            }elseif(!empty($this->to_date) && !empty($this->from_date)){
                $criteria->condition="create_date >= '$this->from_date' and create_date<= '$this->to_date'";
            }

在上面的代码中,$this->from_date是一个属性,你将它用作字符串,因为你在它周围放了逗号。

'$this->from_date'

上面的代码在您的代码中是错误的,因为您可以在其中看到逗号。 尝试

$criteria->condition="create_date >=". $this->from_date;

0
投票

对于MySQL中的日期范围,您应该使用BETWEEN函数。

 $criteria->condition= "create_date between '$this->from_date' and '$this->to_date'"

如果没有设置任何内容,您应该设置默认值from_date和to_date,这样您就可以随时使用一个条件。

在您的标准中,您使用$criteria->compare('satisfy_val',$this->satisfy_val,true);虽然这从未作为表格的输入处理?我会先尝试根据日期获取数据,并确保部分标准正常运行。

另外,你通常会通过CGridView小部件在Yii中实现你正在做的事情。

© www.soinside.com 2019 - 2024. All rights reserved.