Pdo resource как правильно написать условие where
Всем привет.
Мне необходимо использовать фильтр записей, делается это двумя инпутами, сделанными в виде слайдеров, аяксом я передаю эти значения снипету. Так же написал снипет для перевода значений TV и переданных постом в int.
Обе части (тв common-square и переданное Постом)удалось привести к int
Вот код сниппета:
Вот сайт
Решил сделать проще, написать внутри SQL код.
Для начала решил начать с такого, чтобы проверить, работает ли.
В чем может быть дело?
Мне необходимо использовать фильтр записей, делается это двумя инпутами, сделанными в виде слайдеров, аяксом я передаю эти значения снипету. Так же написал снипет для перевода значений TV и переданных постом в int.
Обе части (тв common-square и переданное Постом)удалось привести к int
Вот код сниппета:
<?php
return (int)trim($input);
Вот код ресурса для выборки:[[!pdoResources?
&parents=`15`
&depth=`0`
&tpl=`tpl_house_page`
&includeTVs=`people, main-pic, 1st-floor-square, 2nd-floor-square, Balkon-square, Common-square, Terassa-square`
&where=`{
"[[!strToInt? &input=`[[*Common-square]]`]]:<=":"[[!strToInt? &input=`[[!#POST.square]]`]]",
"AND:people:>=":"[[!#POST.people_count]]"
}`
&showLog=`0`
]]
Но проверка не работает, всегда возвращает пустоту.Вот сайт
Решил сделать проще, написать внутри SQL код.
Для начала решил начать с такого, чтобы проверить, работает ли.
[[!pdoResources?
&parents=`15`
&depth=`0`
&tpl=`tpl_house_page`
&includeTVs=`people, main-pic, 1st-floor-square, 2nd-floor-square, Balkon-square, Common-square, Terassa-square`
&where=`{"TVCommon-square.value <= 120"}`
&showLog=`1`
]]
Но когда я смотрю лог pdoResources, я там в сгенерированном SQL запросе вообще не наблюдаю ничего похожего на TVCommon-square.value <= 120В чем может быть дело?
Комментарии: 1
Дело оказалось в следующем. При написании чистого SQL необходимо оборочивать конструкцию where в квадратные скобки вместо фигурных. Т.е. вот так:
&where=`["TVCommon-square.value <= 120"]`
В дополнение к этому, в имени TV нельзя использовать символ -, так как в SQL запросе он трактуется, как минус, и так же, modx приводит все имена к нижнему регистру, несмотря на название TV Commin_square, в БД таблица будет называться TVcommon_square, т.е. итоговый вариант таков:&where=`["TVcommon_square.value <= 120"]`
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.