Как в QueryBuilder задать условие WHERE для сравнения с текущим значением?

Как переписать запрос с использованием функций дат в Doctrine QueryBuilder?

$qb = $this->createQueryBuilder('o');

$q = $qb
    ->select('o.id')
    ->andWhere($qb->expr()->gt(
        'CURRENT_TIMESTAMP()',
        $qb->expr()->literal('DATE_ADD(o.dateAdd, INTERVAL 1 DAY)')
    ))
    ->andWhere($qb->expr()->gt(
        'o.dateAdd',
        $qb->expr()->literal('DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL 60 DAY)')
    ));
Сейчас запрос использует литералы для сравнения дат, а не функции. Как изменить его для использования функций дат в Doctrine QueryBuilder?
  • 13 октября 2023 г. 8:04
Ответы на вопрос 1
В Doctrine QueryBuilder можно использовать функции дат с помощью метода `expr()->func()`. 

В данном случае, для сравнения с текущим значением можно использовать функцию `CURRENT_DATE()`:

```php
$qb = $this->createQueryBuilder('o');

$q = $qb
    ->select('o.id')
    ->andWhere($qb->expr()->gt(
        $qb->expr()->literal('CURRENT_DATE()'),
        $qb->expr()->literal('DATE_ADD(o.dateAdd, INTERVAL 1 DAY)')
    ))
    ->andWhere($qb->expr()->gt(
        'o.dateAdd',
        $qb->expr()->literal('DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL 60 DAY)')
    ));
```

В этом случае, функция `CURRENT_DATE()` будет использована для сравнения с полем `o.dateAdd`.
Похожие вопросы