Снова where и множественный выбор

Здравствуйте!

Логика должна быть следующая: у текущего ресурса, где запускается выборка есть TV option (например имя1==1) с одним значением. У выбираемых ресурсов есть TV rubrika со списком множественного выбора (там несколько значений вида имя1==1||имя2==2||имя3==3). Выбираться должны только ресурсы имеющие в своем множественном списке совпадение с текущим значением TV ресурса где запускается выборка.

Вот так не работает:
[[!pdoPage?
        &parents=`4`
        &includeTVs=`rubrika`
        &where=`{"[[*option]]:IN":rubrika}`
        &tpl=`RowTpl`
]]
Подскажите, пожалуйста, как решить данную задачку.
newbmod
21 сентября 2022, 14:09
modx.pro
741
0

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

Роман
21 сентября 2022, 16:43
0
Вот тут вообще не понятно, что вы делаете:
{"[[*option]]:IN":rubrika}
Через IN тут не решить вопрос. Нужно через LIKE ()
Добавьте &showLog=`1` и посмотрите, свой запрос.
    newbmod
    21 сентября 2022, 16:46
    0
    Нужно чтобы хотя бы одно из множества значений TV выбираемых ресурсов совпало со значением TV текущего ресурса
      Роман
      21 сентября 2022, 16:50
      0
      А TV текущего ресурса как называется?
        newbmod
        21 сентября 2022, 16:55
        0
        TV текущего ресурса — option
        TV выбираемых ресурсов с множественными значениями — rubrika
    Александр Туниеков
    21 сентября 2022, 19:23
    +1
    Может так
    [[!pdoPage?
            &parents=`4`
            &includeTVs=`rubrika`
            &where=`{"rubrika:LIKE":"%[[*option]]%"}`
            &tpl=`RowTpl`
    ]]
    если значения rubrika меньше 10 должно ловить. Если больше 10, то на option=1 словит и 1 и 10 и 11 и т.д.
      newbmod
      21 сентября 2022, 20:02
      0
      Спасибо большое!
      Да такой подход действительно работает! Мне подошел этот вариант (как раз сейчас 9 элементов).
      Но есть ли более универсальный вариант, где более 10 вариантов?
        Александр Туниеков
        21 сентября 2022, 20:20
        0
        Ну тогда надо архитектуру как-то менять.
        TV rubrika со списком множественного выбора (там несколько значений вида имя1==1||имя2==2||имя3==3) храниться в базе как текст например такой «1||3||13». И ни как запросом LIKE не отличишь 1 от 13.
        Нужно список множественного выбора хранить как отдельные значения в таблице. Например tvsuperselect храниться в 2 таблицах и как текст «1||3||13» и в отдельной таблице отдельные значения. Я не помню как именно.
        Если использовать tvsuperselect, то, наверно, можно в pdoPage подцепить 2-ю таблицу и написать что-то вроде
        [[!pdoPage?
                &parents=`4`
                &loadModels=`tvsuperselect`
                &leftJoin=`{"2-таблица":....}`
                &groupby=`modResource.id`
                &where=`{"2-таблица.value":[[*option]]}`
                &tpl=`RowTpl`
        ]]
          Алексей Смирнов
          21 сентября 2022, 23:30
          0
          Посмотрите это решение:
          modx.pro/solutions/23005
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        8