Doctrine эквивалент выражения in () с датами - PullRequest
1 голос
/ 01 февраля 2020

Используя Doctrine QueryBuilder, я попытался использовать метод in() для массива дат, но обнаружил, что он допускает только строковые значения.

/** @param DateTime[] $dates */
public function findByDate(array $dates): array {
    $qb = $this->createQueryBuilder('Event');
    $qb->andWhere($qb->expr()->in('Event.date', ':dates'));
    $qb->setParameter('dates', $dates);
    return $qb->getQuery()->getResult();
}

Возникла исключительная ситуация при выполнении SELECT [...] с параметрами [{"date": "2020-01-31 00: 00: 00.000000", "timezone_type": 3, "timezone": " Европа / Берлин "}]: Catchable Fatal Error: Объект класса DateTimeImmutable не может быть преобразован в строку

Есть ли какой-нибудь простой эквивалент функции in(), работающей с датами? (желательно без использования DQL)

1 Ответ

0 голосов
/ 01 февраля 2020

Вот решение, которое я придумала, циклически перебирая массив PHP, создавая другой массив eq() выражений, а затем or все. Он выполняет свою работу, но ему нужно объявить один параметр на дату в массиве вместо одного параметра массива.

Дайте мне знать, если вы найдете какой-нибудь лучший способ ...

/** @param DateTime[] $dates */
public function findByDate(array $dates): array {
    $qb = $this->createQueryBuilder('Event');
    $criteria = [];
    for($i = 0; $i < count($dates); $i++) {
        $criteria[] = $qb->expr()->eq('Event.date', ":date_$i");
        $qb->setParameter("date_$i", $dates[$i]);
    }
    $qb->andWhere($qb->expr()->orX()->addMultiple($criteria));
    return $qb->getQuery()->getResult();
}
...