我试图在其他地方找到答案,但不能,但看来我的查询在起作用,但没有返回预期的结果。
我需要运行检查,以找出表格和表是否与表中的现有记录重叠。因此,我要进行日期和时间,并进行检查以查看日期是否匹配以及是否匹配,如果选择的时间落在表中的时间之间。
这是表中的一个示例条目:
| id | booking_date | start_time | end_time |
---------------------------------------------
| 1 | 2017-11-26 | 11:00 | 13:00 |
---------------------------------------------
i以表格以11:00-13:00输入日期2017-11-27。从技术上讲,这不会重叠,因为表格是26日。
这是我的学说查询:
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select('COUNT(b.id)')
->from('AppBundle:Booking', 'b')
->where('b.bookingDate = :date')
->andWhere('b.startTime BETWEEN :start AND :end')
->orWhere('b.startTime = :start')
->orWhere('b.endTime BETWEEN :start AND :end')
->setParameter('date', $date)
->setParameter('start', $start)
->setParameter('end', $end)
;
return $qb->getQuery()->getSingleScalarResult();
,但由于某种原因,这总是返回1。检查实际的SQL似乎没有嵌套在内置,因此检查了以查看传递的日期是否在表中或时代匹配中UP(他们这样做)而不是日期匹配,而startTime
与所选startTime
或endTime
相同。
我该如何编写查询以包含此?
类似于此
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select('COUNT(b.id)')
->from('AppBundle:Booking', 'b')
->where($qb->expr()->eq('b.bookingDate', $date))
->andWhere($qb->expr()->between('b.endTime ', $start, $end))
->andWhere($qb->expr()->orX(
$qb->expr()->eq('b.startTime', $start),
$qb->expr()->between('b.endTime ', $start, $end)
));
return $qb->getQuery()->getSingleScalarResult();