Doctrine 2.2 преобразование строки даты и времени в Symfony 3.4

Я устраняю проблемы с панелью поиска, чтобы возвращать строки за период, выбранный из датпикеров «Кому» и «От».

Первоначально я получил эту ошибку:

Error: Method Doctrine\ORM\Query\Expr\Comparison::__toString() must not throw an exception, caught Symfony\Component\Debug\Exception\ContextErrorException: Catchable Fatal Error: Object of class DateTime could not be converted to string

Я преобразовал соответствующий запрос в строку с помощью функции -> format ():

            if (is_array($value) && isset($value['to'])) {

            $to = \DateTime::createFromFormat('d/m/Y H:i:s', $value['from'] . ' 23:59:59');
            var_dump($value, $to);die;
            if ($to <> false) {
                $query->andWhere(
                        $query->expr()->lte($path, $to->format('Y-m-d H:i:s'))
                );
            }
        }

Теперь доктрина выдает следующую ошибку:

[Syntax Error] line 0, col 977: Error: Expected end of string, got '00'

Есть ли что-то еще, что мне нужно сделать, чтобы отформатировать дату, чтобы сделать ее приемлемой для построителя запросов? Я пробовал использовать / вместо:, но это вызывает проблему.

🤔 А знаете ли вы, что...
PHP предоставляет множество инструментов для отладки кода, таких как Xdebug.


621
1

Ответ:

Решено

Если я правильно помню, вы должны либо использовать буквальный (), либо параметр запроса. А поскольку аргумент lte непостоянен, использование literal() крайне не рекомендуется (из-за потенциальной SQL-инъекции).

В любом случае, вероятно, должно сработать что-то вроде этого:

if (is_array ($ value) && isset ($ value ['to'])) {

if (is_array($value) && isset($value['to'])) {

    $to = \DateTime::createFromFormat('d/m/Y H:i:s', $value['from'] . ' 23:59:59');

    if ($to <> false) {
        $query->andWhere($query->expr()->lte($path, ':to'));
        $query->setParameter('to', $to->format('Y-m-d H:i:s'));
    }
}

Это работает?

Надеюсь, поможет...