簡體   English   中英

按YII框架中的用戶,位置和日期范圍分組

[英]Group by user, location and date range in YII Framework

有人可以幫助我如何使用日期范圍(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(); ?>

你的代碼:

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;

對於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中實現你正在做的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM