在doctrine查询构建器中获取日期

时间:2017-07-17 06:45:02

标签: php mysql symfony doctrine-orm

美好的一天,

我正在尝试从我们的学说查询构建器中获取“从现在开始的2个月以上”和“从现在开始的6个月后”的日期。

我目前拥有的是什么;

if ($type == 'older_than_two_months') {
    $qb->andWhere('i.createdAt < ');
}
if ($type == 'younger_than_six_months') {
    $qb->andWhere('i.createdAt > ');
}

$qb->orderBy('i.createdAt', 'DESC')
    ->setParameter('status', $status);

我只需要添加额外的参数吗?但我不知道如何获得几个月前的日期。

2 个答案:

答案 0 :(得分:2)

使用PHP DateTime&#39;实际上非常简单:

if ($type == 'older_than_two_months') {
    $qb->andWhere('i.createdAt < :olderThan')
        ->setParameter('olderThan', new \DateTime('-2 months'));
}
if ($type == 'younger_than_six_months') {
    $qb->andWhere('i.createdAt > :youngerThan')
        ->setParameter('olderThan', new \DateTime('-6 months'));
}

答案 1 :(得分:0)

if ($type == 'older_than_two_months') {
    $qb->andWhere('f.dateAdded < :twoMonthsAgo')
    $qb->setParameter(':twoMonthsAgo', (new \DateTime())->modify('-2months'))
}
if ($type == 'younger_than_six_months') {
    $qb->andWhere('f.dateAdded > :sixMonthsAgo')
    $qb->setParameter(':sixMonthsAgo', (new \DateTime())->modify('-6months'))
}