“andWhere”子句不起作用Doctrine2

时间:2017-05-24 05:25:13

标签: php symfony doctrine-orm

我想从数据库表中获取一些数据,其中日期字段在两个日期之间。 以下是我的代码:

$date = new \DateTime('today');
$newDate = new \DateTime('today');
$newDate->add(new \DateInterval('P2D'));
$query = $repository->createQueryBuilder('s')
        ->select('s.day')
        ->where('s.day > :data')
        ->andWhere('s.day < :newDate')
        ->setParameter('data', $date)
        ->setParameter('newDate', $newDate)
        ->getQuery();

$dates = $query->getResult();

但遗憾的是它不起作用。

第二种方法也给出了空数组。

$date = new \DateTime('today');
$newDate = new \DateTime('today');
$newDate->add(new \DateInterval('P2D'));
$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
         'SELECT s.day
         FROM AppBundle:Seance s
         WHERE s.day BETWEEN :date AND :newDate')
         ->setParameter('date', $date)
         ->setParameter('newDate', $newDate);

$seances= $query->getResult();

如果我删除了andWhere子句或之间,则doctrine正确地返回数据但是所有记录

有谁知道为什么它不起作用?

2 个答案:

答案 0 :(得分:0)

在我的应用程序中,我使用以下内容执行您的要求:

    /* @var $date1 \DateTime */
    $date1 = \DateTime::createFromFormat('d/m/Y', $this->request()->get("from_date"));
    $date1->format('Y-m-d h:i:s');
    $date1->setTime(0, 0, 0); // You'll likely not need this bit if times don't matter to you

    /* @var $date2 \DateTime */
    $date2 = \DateTime::createFromFormat('d/m/Y', $this->request()->get("to_date"));
    $date2->format('Y-m-d h:i:s');
    $date2->setTime(23, 59, 59); // You'll likely not need this bit if times don't matter to you

然后在它的存储库中我们这样做:

 ->andWhere("s.date >= :date1 AND s.date < :date2)

答案 1 :(得分:0)

您只需要传递正确的标准。

$dateFrom = (new \DateTime())->setTime(0, 0, 0);
$dateTo   = (new \DateTime())->add(new \DateInterval('P2D'))->setTime(23, 59, 59);

$query = $repository->createQueryBuilder('s')
    ->where('s.day >= :dateFrom', 's.day <= :dateTo')
    ->setParameter('dateFrom', $dateFrom)
    ->setParameter('dateTo', $dateTo)
    ->getQuery();

$dates = $query->getResult();