如何在学说查询构建器中一起使用和位置



我试图在其他地方找到答案,但不能,但看来我的查询在起作用,但没有返回预期的结果。

我需要运行检查,以找出表格和表是否与表中的现有记录重叠。因此,我要进行日期和时间,并进行检查以查看日期是否匹配以及是否匹配,如果选择的时间落在表中的时间之间。

这是表中的一个示例条目:

| 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与所选startTimeendTime相同。

我该如何编写查询以包含此?

类似于此

$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();

相关内容

  • 没有找到相关文章

最新更新