bratskiy

bratskiy

Был в сети 04 июля 2024, 13:43
Заказы принимаю
'where' => $modx->toJSON(array($where)),
Это способ работает. Но в целом не удалось получить то что надо.

Ситуация у меня следующая. С помощью getResources, описанным в посте способом, я получаю список объектов. Он выводится у меня постранично. На против каждого объекта есть чекбокс. Ещё есть форма-фильтр. Мне нужно отметить чекбоксы всех записей, которые соответствуют фильтру, а их на данный момент может быть до 2500.

Изначально я сделал всё на getResources. Всё работает. Теперь же решил ускорить работу и для выделения чекбоксов решил использовать ajax с pdoResources.

Теперь я могу визуально наблюдать разницу между getResources и pdoResources. Есть ряд записей, которые pdoResources мне не возвращает, хотя они соответствуют условию фильтра, и тот же getResources мне их отдаёт

pdoResources ни как не хочет подхватывать строку $where. Использую вариант с квадратными скобками
$output .= $modx->runSnippet('pdoResources',array(
   'includeTVs' => $includeTVs,
   'where' => $where,
));
В $where лежит грамотный кусок SQL, сформированный на основе post запроса, обрамлённый квадратными скобками. Например такой
"[ TVfo LIKE '%Южный%' AND (TVclient_activity LIKE '%Физ.охрана%' OR TVclient_activity LIKE '%Пультовая охрана%') ]"
На выходе же where игнорируется и я получаю все записи базы. Спору нет, работает быстрее, если сравнивать с getResources c пустым фильтром, но не фильтруется… В логе есть sql запрос, в нём также присутствие $where я не обнаружил
Спасибо!

Буду пробовать.

Ещё маленький вопросик можно?

Если в OR нам нужен LIKE?
"color:IN":["%black%","%gray%"]
— мне почему-то кажется, что такая констукция работать не будет

Такое нужно например когда мы используем multiselect TV

Как быть тогда?
Василий, подскажите, есть ли в pdoResources возможность решения подобной задачи без правки кода сниппета?

Ознакомился с документацией pdoTools, но не нашёл там ответ

Конкретно меня интересует возможность смены приоритета работы операторов И и ИЛИ в tvFilters

Аjax ответ приходит за 0.3 — 1 сек.

Много?

Заметил, что чем мягче условия поиска, тем дольше приходит ответ. Т.е если сбросить все фильтры, то ответ приходит за секунду. Если составить условия таким образом, что в результате на вывод будет всего пара записей, то ответ сервера 0.3 сек

В базе сейчас примерно 2500 записей