fix(Fetch.php): warning when preparing condition for log message
Что оно делает?
Исправляет warning при подготовке сообщения для логирования
[2025-08-15 10:53:13] (ERROR @ /var/www/public/core/components/pdotools/src/Fetch.php : 229) PHP warning: Array to string conversion
Описание проблемы
Исходя из документации по xPDOQuery::where Этот запрос может быть комплексным и включать в себя многомерный массив. Из за этого функция implode принимает значения, которые не может обработать.
В качестве примера вот такой запрос WHERE отлично парсится и отрабатывает в MODX, но выдает WARNING в коде, который предназначен для подготовки WHERE запроса к логировалию (Смотрите пример предупреждения выше):
[
[
[
"TVtags.value:LIKE" => "%hit%"
],
[
"OR:TVtags.value:LIKE" => "%promo%"
],
[
"OR:TVtags.value:LIKE" => "%sale%"
],
],
[
"TVprice.value:>=" => 104,
"AND:TVprice.value:<=" => 140
],
"modResource.parent:IN" => [5],
"modResource.template:IN" => [3],
"modResource.published" => 1,
"modResource.deleted" => 0
]
Обратите внимание на различие TVprice и TVtags. Из за того, что TVtags могут иметь несколько значений, мы не можем иметь одну вложенность массива (иначе ключ "OR:TVtags.value:LIKE" будет повторяться, и значения будут переписаны, а не добавлены):
// Этот участок кода не работает из за повторяющегося ключа массива
[
[
"TVtags.value:LIKE" => "%hit%",
"OR:TVtags.value:LIKE" => "%promo%", //<-- Ключь массива установлен
"OR:TVtags.value:LIKE" => "%sale%" //<-- Значение перепишет предыдущий ключь
]
]
Поэтому мы можем передать многомерный массив в xPDOQuery.
Парсер xPDOQuery обрабатывает такие массивы рекурсивно, с любым уровнем вложенности.
Предлагаю заменить логирование WHERE (и заодно и HAVING чуть ниже) на json_encode - это выведет в сообщения логов более четкую информацию о том, что именно попало в WHERE и так же снизит количество warning (и error в будущих версиях PHP).