我在Symfony 2项目中有2个DateTime类。我有实体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');
我需要从表stats(实体Stat)中获取$date_from和$date_to之间的所有行。我应该如何使用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();
3条答案
按热度按时间wtlkbnrh1#
本杰明的答案是正确的,但它缺少一个细节。
但要设置参数,我需要这样做:
如果省略DATETIME类型,则会出现以下错误(请参阅here):
无法将DateTime类的对象转换为字符串
我使用的是Doctrine DBAL 2.0.5,在Doctrine的后续版本中,此行为可能已更改。
pepwfjgg2#
QueryBuilder是一个很好的解决方案。
但你可以用
或
$qb-〉expr()-〉andX是有用的,如果你不想在添加andWhere或orWhere时出现一些WTF。
Here you have doctrine2 documentation for queryBuilder
您也可以使用setParameters方法作为参数
r6vfmomb3#
我也遇到过类似的情况。由于我的代码是如何构建的,我不能使用-〉setParameter,所以我使用$andX变量来“捕获”foreach循环中的所有条件(在本例中,我只写了一个带有日期的条件,因为其他条件现在并不相关)。
请注意,这个函数的参数是一个多维数组。希望这对您有所帮助。