使用Doctrine选择两个日期时间之间的行

3

我想选择从一个表单提交而来的起始日期和结束日期之间的行,并且在本地主机上已经完成了以下操作(它有效):

public function getReport($initialDate, $finalDate)
{
    $qb = $this->createQueryBuilder('s')
                ->where('s.date BETWEEN :initialDate AND :finalDate')
                ->setParameter('initialDate', $initialDate->format('Y-m-d'))
                ->setParameter('finalDate', $finalDate->format('Y-m-d'));
    return $qb->getQuery()->getResult();
}

但是当我托管我的网站时,它返回了0个结果,我不知道出了什么问题。


你的本地主机和Web主机之间在PHP / Symfony核心版本方面有任何差异吗? - Oldskool
不,我和php使用相同的扩展名,并且对于Symfony2,我没有做任何更改。 - Saint - Cyr MAPOUKA
1
显示您的SQL echo $qb->getQuery()->getSQL() 并在服务器上手动测试您的查询。在这种情况下,我们无法帮助您,因为我们不知道生产/开发数据库中的数据是否相同,以及服务器配置是否相同。 - Raphaël Malié
我假设你已经从本地主机加载了数据库到你现在运行的地方了吗? - RiggsFolly
1个回答

1

你应该设置DateTime对象,而不是将其格式化为字符串。

尝试使用:

public function getReport($initialDate, $finalDate)
{
    $qb = $this->createQueryBuilder('s')
                ->where('s.date BETWEEN :initialDate AND :finalDate')
                ->setParameter('initialDate', $initialDate)
                ->setParameter('finalDate', $finalDate);
    return $qb->getQuery()->getResult();
}

public function getReport($initialDate, $finalDate)
{
    $qb = $this->createQueryBuilder('s');

                ->where('s.date BETWEEN :initialDate AND :finalDate')
                ->setParameter('initialDate', $initialDate)
                ->setParameter('finalDate', $finalDate);
    return $qb->getQuery()->getResult();
}

你可以使用以下方式将EXPR组件与BETWEEN语句结合使用:

您可以使用以下方式将EXPR组件与BETWEEN语句结合使用:

public function getReport($initialDate, $finalDate)
{
    $qb = $this->createQueryBuilder('s');
    $qb->where($qb->expr()->between('s.date',':initialDate',':finalDate'))
        ->setParameter('initialDate', $initialDate)
        ->setParameter('finalDate', $finalDate);
    return $qb->getQuery()->getResult();
}

希望这有所帮助。

你给我的所有代码在本地主机上都能够完美运行,但是当我将其放到远程服务器上时,它仍然返回 null,我完全不理解。 - Saint - Cyr MAPOUKA
1
当我在仓库中设置变量时,像这样:$initialDate = new \DateTime('2012-12-03'); 我得到了正确的值。 - Saint - Cyr MAPOUKA
Doctrine中如何定义字段类型?是datetime还是date? - Matteo
1
所有字段都被定义为dateTime。我刚刚意识到一些事情:当表单被提交时,初始日期变量为空,而且sonata_type_datetime_picker在本地主机上显示表单内容的方式与服务器上不同。例如,在本地主机上显示为“9月1日...”,而在远程服务器上显示为“September 1st ...”。因此,我认为问题可能在于sonata formType sonata_type_datetime_picker。 - Saint - Cyr MAPOUKA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接