Symfony2针对输入时间进行查询的方法分析
本文实例讲述了Symfony2针对输入时间进行查询的方法。分享给大家供大家参考,具体如下:
一般情况下:前端输入一个时间,我们一般是先将时间修改成一个时间戳
strtotime—将任何英文文本的日期时间描述解析为Unix时间戳
例如:
$startTimestamp=strtotime($startDate); $endTimestamp=strtotime($endDate);
然后:如果只是时间,为防止别人传的时间是造假,需要将时间都修改成Y-m-d的形式
$start=date('Y-m-d00:00:00',$startTimestamp); $end=date('Y-m-d23:59:59',$endTimestamp);
1.在MySQL中的使用
if(empty($startDate)){ thrownew\Exception('起始时间不为空',BaseException::ERROR_CODE_ILLEGAL_PARAMETER); } if(empty($endDate)){ $endDate=$startDate; } $startTimestamp=strtotime($startDate); $endTimestamp=strtotime($endDate); if($startTimestamp>$endTimestamp){ thrownew\Exception('时间参数错误',BaseException::ERROR_CODE_ILLEGAL_PARAMETER); } if($status==InventoryOrder::STATUS_SUBMITTED){ $index='i.submitTime'; }elseif($status==InventoryOrder::STATUS_UNSUBMITTED){ $index='i.createTime'; }elseif(empty($status)){ $index='i.createTime'; }else{ thrownew\Exception('时间格式不正确',BaseException::ERROR_CODE_ILLEGAL_PARAMETER); } $sql='SELECTiFROMAppBundle:InventoryOrderiWHERE'; $sql.=$index; $sql.='BETWEEN:startDateAND:endDate'; $start=date('Y-m-d00:00:00',$startTimestamp); $end=date('Y-m-d23:59:59',$endTimestamp); $params['endDate']=$end; $params['startDate']=$start; if(!empty($status)){ $sql.='ANDi.status=:status'; $params['status']=$status; } $sql.='ORDERByi.createTimeDESC'; $query=$this->entityManager->createQuery($sql); $orderList=$query->setParameters($params)->getResult();
2.在mongodb中的时间的输入和查询列子
在这里面其实有两个坑:
@->field('submit_time')->gt(new\DateTime($start)) ->field('submit_time')->lt(new\DateTime($end))
这里面,对于时间的查询,大于和小于,一定要传一个对象。
$query->field('status')->equals($status);
这里面,在mongodb里面不会默认帮你识别这是一个int型,是什么类型,必须手动的传入。
$data=array(); if(!isset($startDate)){ thrownew\Exception("参数不正确",BaseException::ERROR_CODE_ILLEGAL_PARAMETER); } if(empty($endDate)){ $endDate=$startDate; } $startTimestamp=strtotime($startDate); $endTimestamp=strtotime($endDate); if($startTimestamp>$endTimestamp){ thrownew\Exception("参数不正确",BaseException::ERROR_CODE_ILLEGAL_PARAMETER); } $start=date('Y-m-d00:00:00',$startTimestamp); $end=date('Y-m-d23:59:59',$endTimestamp); $scanner=Order::FROM_TYPE_SCANNER; $query=$this->documentManager ->createQueryBuilder('AppBundle:Order') ->field('submit_time')->gt(new\DateTime($start)) ->field('submit_time')->lt(new\DateTime($end)) ->field('from_type')->equals("$scanner"); if(!empty($status)&&in_array($status,array(Order::STATUS_CANCELLED,Order::STATUS_SUBMITTED))){ $status=$status+0; $query->field('status')->equals($status); }elseif(empty($status)){ $status=Order::STATUS_SUBMITTED+0; $query->field('status')->equals($status); }else{ thrownew\Exception("参数不正确",BaseException::ERROR_CODE_ILLEGAL_PARAMETER); } $orderList=$query->sort('create_time','DESC') ->getQuery() ->execute();
更多关于Symfony2相关内容感兴趣的读者可查看本站专题:《Symfony框架入门教程》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《php优秀开发框架总结》、《ThinkPHP入门教程》、《ThinkPHP常用方法总结》、《ZendFrameWork框架入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于Symfony2框架的PHP程序设计有所帮助。