прошу помочь с where fenom

Добрый день! Имеется следующий вызов pdoResources:
{pdoResources' | snippet : [
        'limit' => 0,
        'parents' => $poselki,
        'depth' => 0,
        'return' => 'ids',
        'select' => '{
                "modResource":"*",
                "Status":"`value` AS `sell_status`"
            }',
        'leftJoin' => '{
                "Status":{"class":"msProductOption","on":"Status.product_id = modResource.id AND Status.key = \'sell_status\'"}
            }',
        'where' => '{"Status.value:IN":['',0,2]}',
        'showLog' => 0}
И понадобилось создать дополнительно TV поле, которое бы определяло участвует товар в выборке или нет.

Сделал TV поле searching. Попробовал добавить его в выборку вот так:
pdoResources' | snippet : [
        'limit' => 0,
        'parents' => $poselki,
        'depth' => 0,
        'return' => 'ids',
        'select' => '{
                "modResource":"*",
                "Status":"`value` AS `sell_status`"
            }',
        'leftJoin' => '{
                "Status":{"class":"msProductOption","on":"Status.product_id = modResource.id AND Status.key = \'sell_status\'"}
            }',
        'includeTVs' => 'searching',
        'where' => '{"searching":"1", "AND:Status.value:IN":['',0,2]}',
        'showLog' => 0
Но работает все точно так же как и раньше, TV поле searching игнорируется
Прошу помочь подсказать, что именно не так в where?
Sergey Leleko
10 октября 2017, 13:54
modx.pro
2
6 184
0

Комментарии: 10

Александр
10 октября 2017, 17:58
+1
обработка tv уже давно используется в &tvFilters
    Sergey Leleko
    11 октября 2017, 10:15
    0
    Александр, благодарю! Именно его и нужно было использовать, этот параметр.
    Василий Наумкин
    11 октября 2017, 08:14
    +3
    'showLog' => 0
    Это чтобы угадывать интереснее было?

    Ведь если указать 1, то сразу будет понятно, как идёт выборка и что там игнорируется.
      Sergey Leleko
      11 октября 2017, 10:16
      0
      Логично, но по какой-то причине на момент написания поста он не срабатывал, поэтому текст вывода не приложил.
        Василий Наумкин
        11 октября 2017, 10:19
        0
        Либо ты не авторизован в админке, либо авторизован на сайте как юзер — других вариантов нет.

        Ну и всё, указанное в &tvFilters, парсится и передаётся в &where, так что это просто лишнее звено для совместимости с getResources.
          Sergey Leleko
          11 октября 2017, 10:24
          0
          Да, я понимаю что нужно быть авторизованным в админке чтобы видеть вывод этот. Днем из одного места делал все видно было, а вечером из дома уже под этим же админским пользователем почему-то нет. Ну, дело позднее было, может что-то не так делал)

          Что касается
          where
          , то получается можно просто дописать в него это условие?
            Василий Наумкин
            11 октября 2017, 10:28
            2
            +1
            Нужно.

            Причём, писать лучше массивом, потому что сейчас у тебя там JSON с ошибкой:
            'includeTVs' => 'searching',
            'where' => [
            	'searching' => 1, 
            	'Status.value:IN' => ['', 0, 2],
            ],
            Тоже самое касается и join — все сниппеты pdoTools давно понимают указание массивов через Fenom.
              Sergey Leleko
              11 октября 2017, 10:33
              0
              Василий, большое человеческое спасибо за такое подробное разъяснение!
            Александр
            11 октября 2017, 10:44
            0
            Василий, т.е. tvFilters параметр — необязателен? Я недавно тоже тыкался на выборке с TV, по sql запросу в select TV добавлялось, но where полностью игнорировал параметр.

            Еще небольшой оффтоп, по debugparser. В чем может заключаться ошибка, если вместо тега (который обработался), он выводит отрендереный код страницы?
        Sergey Leleko
        11 октября 2017, 10:19
        0
        В итоге привел по наводке Александра к такому виду
        {pdoResources' | snippet : [
                'limit' => 0,
                'parents' => $poselki,
                'depth' => 0,
                'return' => 'ids',
                'select' => '{
                        "modResource":"*",
                        "Status":"`value` AS `sell_status`"
                    }',
                'leftJoin' => '{
                        "Status":{"class":"msProductOption","on":"Status.product_id = modResource.id AND Status.key = \'sell_status\'"}
                    }',
                'includeTVs' => 'searching',
        	'tvFilters' => 'searching==1',
                'where' => '{"searching":"1", "AND:Status.value:IN":['',0,2]}',
                'showLog' => 0}
        И все заработало как надо.
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          10