pdoResource - проблема с NULL в &where=``
Василий, привет!
Нужны мне вот такие условия в запросе:
Как передать в &where=`` pdoResource'а проверку на NULL?
opengeek пишет, что надо использовать PHP NULL:
Но как это передать в строке json в вызове сниппета?
Если вызываю как в примере выше:
Если в вызове сниппета NULL пишу без кавычек:
Как это обойти — не знаю. Посоветуй что-нибудь, пожалуйста!
Нужны мне вот такие условия в запросе:
SELECT <...>
WHERE `modResource`.`parent` IN (103,104,105,107,106,108,109,110,115,120) AND (`TVshow_in_main`.`value` != 1 OR `TVshow_in_main`.`value` IS NULL)Вызываю вот так:[[pdoResources?
&tpl=`tpl.article.preview`
&parents=`103`
&includeTVs=`show_in_main`
&where=`[{"show_in_main:!=": "1", "OR:show_in_main:IS": "NULL"}]`
&tvPrefix=``
&showLog=`1`
]]pdoResource всё отлично джойнит и работает как надо, но...Как передать в &where=`` pdoResource'а проверку на NULL?
opengeek пишет, что надо использовать PHP NULL:
$query->where(array("Tsearch.system_brand_id:IS" => NULL));Но как это передать в строке json в вызове сниппета?
Если вызываю как в примере выше:
&where=`[{"show_in_main:!=": "1", "OR:show_in_main:IS": "NULL"]}`, то в сниппет приходит строка «NULL», а не тип NULL, и в запросе получается вот так:IS 'NULL'Если в вызове сниппета NULL пишу без кавычек:
&where=`[{"show_in_main:!=": "1", "OR:show_in_main:IS": NULL]}`, то ошибка парсинга json.Как это обойти — не знаю. Посоветуй что-нибудь, пожалуйста!
Комментарии: 12
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Ну и еще вот тут много информации.
Попробовал написать так, как ты предложил — ничего не вышло, но заработал вот такой вариант:
Т.е. теперь условие формируется верно, но опять «но» — xpdo не соблюдает вложенность при таком варианте. Получается вот так:
хотя должны были быть скобки:
Попробовал в &where=`` сделать вложенный массив:
Результата не принесло — условия снова без скобок. Даже и не знаю…
p.s. в статье была ошибка — json-условия были написаны без массива, т.е. без '[]'. А тестировал я как положено. Статью поправил.
Если писать как я показываю — это чистое SQL условие. Добавляй там скобочки, никаких массивов не нужно.
Поэтому имена ТВ и не заменяются — ибо обработки нет никакой.
То есть, это строка в JSON:
Спасибо!
пример условия:
выводит ошибку при аякс пагинации\фильтрах (при перезагрузке по F5 отрабатывает как надо). Хотя вот так:
работает и с аякс и с прямой загрузкой странички. Но тут не поставить скобочки, чтоб их.
в табличке modx_session пишется информация вида:
— в общем весь шаблон для построения фильтров mSearch.
В яваскрипте ж нету значения NULL, есть только null.
Написал вот так:
&where=`[{«TVshow_in_main.value:!=»: «1», «OR:TVshow_in_main.value:IS»: null]}`
и всё ок — и вложенность соблюдается и условие IS NULL прописывается правильно.
Только если просто писать название заинклюденного tv-параметра, то в конечном запросе получается modResource.show_in_main. Поэтому TVshow_in_main.value.
Это для выборки изображений из галереи ms2gallery, которым не присвоено ни одного тэга.
Но Fenom, понятно, лучше со всех сторон.
https://rtfm.modx.com/xpdo/2.x/class-reference/xpdoquery/xpdoquery.where