Я устраняю проблемы с панелью поиска, чтобы возвращать строки за период, выбранный из датпикеров «Кому» и «От».
Первоначально я получил эту ошибку:
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.
Если я правильно помню, вы должны либо использовать буквальный (), либо параметр запроса. А поскольку аргумент 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'));
}
}
Это работает?
Надеюсь, поможет...