v1kee 04 июня 2015 0 1
Добрый день уважаемые! Третий день уже бьюсь над проблемой, все облазил и перелазил ничего не помогает:
Имеется таблица MIGXDB с товарами из нее дергаются элементы через getProducts у которых стоит значение доступен = 1 (available = 1):

[[getProduct?
    &className=`ShopContent`
    &packageName=`shop`
    &limit=`[[!#get.limit:default=`12`]]`
    &parents=`7`
    &tpl=`catalogElement`
    &where=`{"available:=":"1"}`]]

Так все работает, но мне необходимо выбрать элементы которые если недоступны, то имеют значение toOrder = 1. Вобщем в mysql рабочий запрос простой и рабочий, вот такой:
<cut>
SELECT * FROM `modx_shop_content` as m WHERE m.toOrder = 1 OR m.toOrder = 0 AND m.available = 1

Судя по оффициальной документации rtfm.modx.com/extras/revo/getresources:
&where=`{"template:=":1, "OR:template:=":2}`

исходя из этого, должен работать следующий код, но ни один не работает (пустая выборка):

&where=`{"toOrder:=":"1","OR:toOrder:=":"0","AND:available:=":"1"}'
&where=`{"toOrder:=:OR":"1","toOrder:=:AND":"0","available:=":"1"}'

в логе пишет всегда с AND условиями почему непонятно:

SELECT DISTINCT `sc`.`id` FROM `modx_shop_content` `sc`
            WHERE ( ( `sc`.`resource_id` IN (7)
             ) 
 AND (`sc`.`available` = :available04)
 AND (`sc`.`available` = :available05)
 AND (`sc`.`toOrder` = :toOrder06)
 )

Люди добрые может кто сталкивался подскажите где собака зарыта?
1 комментарий
K
Kyrt_God 09 июня 2015г в 10:05 #
JSON прогоняется через $modx->fromJSON($json), на выходе получается массив условий, чтобы он был верно разобран нужно соблюдать определенные правила, об этом подробнее можно почитать тут rtfm.modx.com/xpdo/2.x/class-reference/xpdoquery/xpdoquery.where

Собственно все можете проверять в консоли modx.


$where = array(
    array(
        "available:="=>"0"
        ,"AND:toOrder:="=>"1"
    )
    ,"OR:available:="=>"1"
);
$c = $modx->newQuery('modResource');
$c->where($where);
$c->select('id');
$c->prepare()
echo $c->toSQL();


Вернет:

SELECT `id` FROM `modx_site_content` AS `modResource` WHERE  (  ( `modResource`.`available` = '0' AND `modResource`.`toOrder` = '1' )  OR `modResource`.`available` = '1' )  


А если сделать вот так:

echo $modx->toJSON($where);

получите вашу JSON строку:

{"0":{"available:=":"0","AND:toOrder:=":"1"},"OR:available:=":"1"}

Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.