Symfony2 datetime queryBuilder [英] Symfony2 datetime queryBuilder

查看:102
本文介绍了Symfony2 datetime queryBuilder的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Symfony2项目中有2个 DateTime 课程。我有实体 Stat ,其中有 $ date 属性。

I have 2 DateTime classes in Symfony2 project. I have entity Stat, in which have $date property.

/**
 * @ORM\Column(type="date", length="11")
 */
protected $date;

我必须使用创建QueryBuilder中的 DateTime 对象进行查询即可。我怎样才能做到这一点 ?例如:

I have to make queries using DateTime objects in createQueryBuilder. How can i do that ? For example:

$date_from = new DateTime('2012-02-01');
$date_to = new DateTime('2012-02-15');

我需要从表格 stats (实体 $ date_from和$ date_to之间的Stat )。我应该怎么用createQueryBuilder写我的查询?我现在的代码是:

I need to get all rows from table stats (entity Stat) between $date_from and $date_to. How should i write my query with createQueryBuilder ? My current code is:

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


推荐答案

本杰明的答案是正确的,但缺少一个细节。
这是正确的方法:

Benjamin's answer is correct, but it lacks one detail. This is the correct way to do it:

$qb->andWhere($qb->expr()->between('s.date', ':date_from', ':date_to'));

但是要设置参数,我需要这样做:

But to set parameters, I need to do like this:

$qb->setParameter('date_from', $date_from, \Doctrine\DBAL\Types\Type::DATETIME);
$qb->setParameter('date_to', $date_to, \Doctrine\DBAL\Types\Type::DATETIME);

如果我省略DATETIME类型,我会收到以下错误(请参阅这里):

If I omit the DATETIME types, I get the following error (see here):


类DateTime无法转换为字符串

Object of class DateTime could not be converted to string

我正在使用Doctrine DBAL 2.0.5,这种行为可能在更新版本的Doctrine 。

I am using Doctrine DBAL 2.0.5, this behaviour might have changed in later versions of Doctrine.

这篇关于Symfony2 datetime queryBuilder的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆