利用类的属性来对时间区间的搜索

本文介绍了一种解决数据库中仅有单个时间字段(add_time)但需要进行时间区间搜索的方法。通过在Model中定义start_time和end_time属性,并在搜索方法中使用这些属性来实现区间比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天工作的时候遇到一个问题,一个模块的数据表只存了一个时间字段 add_time ,但是搜索是区间的。

这个时候就可以用我的办法来解决了。这个问题比较常见,故而整理下来。


            <td >
                操作时间 <input type="text" name="start_time" id="start_time" value="" class="Wdate" onfocus="WdatePicker({dateFmt:'yyyy-MM-dd'})" size="15">
              ~<input type="text" name="end_time" id="end_time" value="" class="Wdate" onfocus="WdatePicker({dateFmt:'yyyy-MM-dd'})" size="15">
            </td>

start_time 和 end_time 是数据库中没有的,

add_time 数据库中存储的是这个字段


接着需要在model中定义属性,start_time和end_time,因为需要在search方法中用到


	public $startTime;
	public $endTime;


在执行搜索的控制器代码处,增加

	    $model->attributes = $_POST['queryParams'];
            $_GET['page'] = $_POST['page'];
            
            $model->startTime = $_POST['queryParams']['start_time'];
            $model->endTime = $_POST['queryParams']['end_time'];


这个时候程序对去找model中的search,在search方法中接着处理

	$criteria=new CDbCriteria();

	$criteria->compare('order_type',$this->order_type);
	$criteria->compare('order_id',$this->order_id);
	$criteria->compare('order_sn',$this->order_sn);
	$criteria->compare('operator',$this->operator);
	$criteria->compare('notes',$this->notes);
	$criteria->compare('front_show', $this->front_show);
	<span style="color:#ff0000;">if($this->endTime){
		$criteria->addCondition('add_time <='.strtotime($this->endTime));
	}
	if($this->startTime){
		$criteria->addCondition('add_time >='.strtotime($this->startTime));
	}</span>
	$criteria->order = 'order_id';

这样就解决了。

但是这样并不等于完成了,因为方法原理你明白了?


原理:

利用model类中的属性 start_time和end_time ,在执行这个方法的时候先给他们赋值,在执行search方法的时候再去调用赋的值。















转载于:https://www.cnblogs.com/iplus/archive/2012/05/10/4489974.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值