two*_*e88 20 php doctrine symfony
我在Symfony2项目中有2个DateTime类.我有实体Stat,其中有$ date属性.
/**
* @ORM\Column(type="date", length="11")
*/
protected $date;
Run Code Online (Sandbox Code Playgroud)
我必须在createQueryBuilder中使用DateTime对象进行查询.我怎样才能做到这一点 ?例如:
$date_from = new DateTime('2012-02-01');
$date_to = new DateTime('2012-02-15');
Run Code Online (Sandbox Code Playgroud)
我需要从$ 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();
Run Code Online (Sandbox Code Playgroud)
Rau*_*ets 33
本杰明的回答是正确的,但缺乏一个细节.这是正确的方法:
$qb->andWhere($qb->expr()->between('s.date', ':date_from', ':date_to'));
Run Code Online (Sandbox Code Playgroud)
但是要设置参数,我需要这样做:
$qb->setParameter('date_from', $date_from, \Doctrine\DBAL\Types\Type::DATETIME);
$qb->setParameter('date_to', $date_to, \Doctrine\DBAL\Types\Type::DATETIME);
Run Code Online (Sandbox Code Playgroud)
如果我省略DATETIME类型,我会收到以下错误(请参阅此处):
类DateTime的对象无法转换为字符串
我使用的是Doctrine DBAL 2.0.5,在以后的Doctrine版本中,这种行为可能已经发生了变化.
QueryBuilder是一个很好的解决方案.
但你可以使用
->andWhere($qb->expr()->between('s.date', ':date_from', 'date_to'))
Run Code Online (Sandbox Code Playgroud)
要么
->andWhere($qb->expr()->andX(array(
$qb->expr()->gte('s.date', ':date_from'),
$qb->expr()->lte('s.date', ':date_to'))
)
Run Code Online (Sandbox Code Playgroud)
$ qb-> expr() - >和X是有用的,如果你不想在添加一些andWhere或orWhere时有一些WTF.
您还可以使用setParameters方法作为参数
->setParameters(array(
'date_from' => $date_from,
'date_to' => $date_to,
))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32407 次 |
| 最近记录: |