我有 2 个 DateTime Symfony2 项目中的类。我有实体 Stat,其中有 $date 属性。
/**
* @ORM\Column(type="date", length="11")
*/
protected $date;
我必须使用 createQueryBuilder 中的 DateTime 对象进行查询。我怎样才能做到这一点 ?例如:
$date_from = new DateTime('2012-02-01');
$date_to = new DateTime('2012-02-15');
我需要从 $date_from 和 $date_to 之间的表 stats(实体 Stat)中获取所有行。我应该如何使用 createQueryBuilder 编写查询?我当前的代码是:
$qb = $em->createQueryBuilder();
$query = $qb->select('s')
->from('ACME\MyBundle\Entity\Stat', 's')
->where('s.date >= :date_from')
->andWhere('s.date <= :date_to')
->setParameter('date_from', $date_from)
->setParameter('date_to', $date_to)
->getQuery();
最佳答案
本杰明的回答是正确的,但缺少一个细节。 这是正确的做法:
$qb->andWhere($qb->expr()->between('s.date', ':date_from', ':date_to'));
但是要设置参数,我需要这样做:
$qb->setParameter('date_from', $date_from, \Doctrine\DBAL\Types\Type::DATETIME);
$qb->setParameter('date_to', $date_to, \Doctrine\DBAL\Types\Type::DATETIME);
如果我省略 DATETIME 类型,我会收到以下错误(请参阅 here):
Object of class DateTime could not be converted to string
我正在使用 Doctrine DBAL 2.0.5,此行为在 Doctrine 的更高版本中可能已更改。
关于php - Symfony2 日期时间查询生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9493992/