Как вывести участника двух групп?

Понадобилось мне вывести ресурсы пользователя который состоит в двух группах одновременно
Примерно так

Группа 2 Поэт
Группа 3 Писатель
Группа 4 Одобрено модератором

При регистрации автор указывает кто он и публикует тексты
Если модератор видит что это тексты нормальные добавляет пользователя в группу 4 «одобрено модератором»

И ни чего не выходит
часть запроса такая

'select' => [
     'modResource' => '*',
     'modUserGroupMember' => 'modUserGroupMember.member,modUserGroupMember.user_group',
 ],
 'leftJoin' => [
     'modUserGroupMember' => [
     'class' => 'modUserGroupMember',
    'on' => 'modUserGroupMember.member = modResource.createdby'
     ]
 ]
'where' => '{"modUserGroupMember.user_group": 3,  "AND:modUserGroupMember.user_group": 4 }'
Вася
04 октября 2018, 02:15
modx.pro
997
0
Поблагодарить автора Отправить деньги

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

Илья Уткин
04 октября 2018, 10:16
+1
Надо делать два джойна для modUserGroupMember. Как-то так:

'select' => [
     'modResource' => '*',
     'userType' => 'userType.member,userType.user_group',
     'userAccess' => 'userAccess.member,userAccess.user_group',
 ],
 'leftJoin' => [
     'userType' => [
       'class' => 'modUserGroupMember',
       'on' => 'userType.member = modResource.createdby'
     ],
     'userAccess' => [
       'class' => 'modUserGroupMember',
       'on' => 'userAccess.member = modResource.createdby'
     ]
 ]
'where' => '{"userType.user_group": 3,  "AND:userAccess.user_group": 4 }'
    Илья Уткин
    04 октября 2018, 10:18
    +1
    Оу, ну не так, конечно. Вот так, наверное:

    'select' => [
         'modResource' => '*',
         'userType' => 'userType.member,userType.user_group',
         'userAccess' => 'userAccess.member,userAccess.user_group',
     ],
     'leftJoin' => [
         'userType' => [
           'class' => 'modUserGroupMember',
           'on' => 'userType.member = modResource.createdby AND userType.user_group = 3'
         ],
         'userAccess' => [
           'class' => 'modUserGroupMember',
           'on' => 'userAccess.member = modResource.createdby AND userAccess.user_group = 4'
         ]
     ]
    'where' => '{"userType.user_group:IS NOT": NULL,  "AND:userAccess.user_group:IS NOT": NULL }'
      Илья Уткин
      04 октября 2018, 10:18
      +1
      И вообще, наверное, надо без WHERE — просто сделать rightJoin
        Вася
        04 октября 2018, 13:10
        0
        'select' => [
             'modResource' => '*',
             'userType' => 'userType.member,userType.user_group',
             'userAccess' => 'userAccess.member,userAccess.user_group',
         ],
         'leftJoin' => [
             'userType' => [
               'class' => 'modUserGroupMember',
               'on' => 'userType.member = modResource.createdby AND userType.user_group = 3'
             ]
         ],
         
          'rightJoin' => [
             'userAccess' => [
               'class' => 'modUserGroupMember',
               'on' => 'userAccess.member = modResource.createdby AND userAccess.user_group = 4'
             ]
         ],
        Спасибо, Илья!
        Выручали вы меня уже много раз своими статьями
          Илья Уткин
          04 октября 2018, 13:14
          0
          Не-не — если делать rightJoin, то для обоих случаев. Или придётся вернуть where, но убрать AND userType.user_group = 3

          Если я не ошибаюсь, то этот код выведет и пользователей, которые состоят в группе 4, но не состоят в любой другой группе.
            Илья Уткин
            04 октября 2018, 13:14
            +1
            'select' => [
                 'modResource' => '*',
                 'userType' => 'userType.member,userType.user_group',
                 'userAccess' => 'userAccess.member,userAccess.user_group',
             ],
              'rightJoin' => [
                 'userType' => [
                   'class' => 'modUserGroupMember',
                   'on' => 'userType.member = modResource.createdby AND userType.user_group = 3'
                 ],
                 'userAccess' => [
                   'class' => 'modUserGroupMember',
                   'on' => 'userAccess.member = modResource.createdby AND userAccess.user_group = 4'
                 ]
             ],
              Вася
              04 октября 2018, 13:19
              0
              да я уже понял
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      7