[英]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.