这是控制器中的代码
$time = date('H:i:s');
$repository = $this->getDoctrine()->getRepository('MainHomeBundle:Tec');
$count = $repository->createQueryBuilder('t')
->select('COUNT(t)')
->leftJoin('MainHomeBundle:Clients', 'c', 'WITH', 't.townId = c.townId')
->where('t.onservice = 0')
->andWhere('t.status = 1')
->andWhere('t.datestart < ' . $tiempo)
->andWhere('t.dateend > ' . $tiempo)
->getQuery()
->getSingleScalarResult();
t.datestart和t.dateend是日期时间字段
我找到匹配的记录数
2016-01-01 08:00:00 &gt; $ time &lt; 2015-12-31 20: 00:00
仅比较时间
如果不是一个好主意使用&gt;和&lt;或者在
之间有一些方法答案 0 :(得分:0)
如果你想让它们严格大于和小于,那么你已经正确地做到了。还存在一个介于操作之间的操作,但是在检查中也包括等值,即使用检查示例变为:
2016-01-01 08:00:00 >= $time <= 2015-12-31 20:00:00
此外,两者之间的操作通常只是一个语法糖,即它会产生大于和小于(至少在mysql上)的相同查询,因此在性能方面,使用哪一个并不重要。< / p>
仅供参考,您可以像这样使用之间的操作:
->andWhere($tiempo . ' BETWEEN t.datestart AND t.dateend')
并且为了记录,不习惯将参数值直接引用到查询构建器中,而是将它们与setParameter()函数放在一起是一个好习惯(在这种情况下,您可能只是使用自己构造的时间,但仍然总是使用setParameter方法是一个很好的做法