Вывод пользователей при помощи pdoFetch

Всем привет!
Нужно сделать вывод пользователей при помощи pdoFetch.
Есть вывод пользователей, который выглядит так

[[!pdoPage?
				    &class=`modUser`
                                    &tpl=`tpl.users.row`
                                    &element=`pdoFetch`
                                    
                                    &leftJoin=`{
                                		"Attributes": {
                                			"class": "modUserProfile",
                                			"on": "modUser.id = Attributes.id"
                                		}
                                	}`
                                	&select=`{
                                		"modUser" : "*"
                                		"Attributes" : "fullname, website"
                                	}`
                                	&groupby=`modUser.id`
                                ]]
&element=`pdoFetch` возвращает
$pdoFetch->run();
Тут все работает.

Сейчас нужно сделать фильтрацию по группам пользователей.
Пытаюсь сделать так:

[[!pdoPage?
                                    &class=`modUser`
                                    &tpl=`tpl.users.row`
                                    &element=`pdoFetch`
                                    
                                    &leftJoin=`{
						"Attributes": {
                                			"class": "modUserProfile",
                                			"on": "modUser.id = Attributes.id"
                                		},
                                		"Group": {
                                		    "class": "modUserGroupMember"
                                		    "on": "modUser.id = Group.member"
                                		}
                                	}`
                                	&select=`{
						"modUser" : "*",
						"Attributes" : "fullname, website",
                                		"Group": "user_group"
                                	}`
                                	&groupby=`modUser.id`
                                ]]
Ничего не выводится…

Но вот так
[[!pdoPage?
                                    &class=`modUserGroupMember`
                                    &tpl=` `
                                    &element=`pdoFetch`
                                	&select=`{
                                		"modUserGroupMember" : "user_group"
                                	}`
                                ]]
Выводит все поля из таблицы «modx_member_groups»

В логах ошибка pdoTools] Error 42S22: Unknown column 'SQL_CALC_FOUND_ROWS user_group' in 'field list'
Владислав
25 января 2016, 11:42
modx.pro
1
1 444
0

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

Владислав
25 января 2016, 16:44
0
[[!pdoPage?
                                        &class=`modUser`
                                        &tpl=` `
                                        &element=`pdoFetch`
                                        &leftJoin=`{
                                            "Attributes": {
                                    			"class": "modUserProfile",
                                    			"on": "modUser.id = Attributes.id"
                                    		},
                                    		"Group": {
                                    			"class": "modUserGroupMember",
                                    			"on": "modUser.id = Group.member"
                                    		}
                                		}`
                                    	&select=`{
                                        	"Attributes": "fullname"
                                    	}`
                                    	&groupby=`modUser.id`
                                    	&where=`{"Group.user_group": 2}`
                                    ]]
Так работает.
Такое впечатление, что пишу сюда вопрос, чтобы сам разобраться и написать сюда ответ)
    Василий Наумкин
    25 января 2016, 17:14
    0
    Вообще-то, в pdoTools есть сниппет pdoUsers.
      Владислав
      25 января 2016, 17:17
      0
      Знаю, я бы его и использовал, но у меня есть еще свой класс в котором хранятся операции совершенные пользователем, я убрал его здесь, чтобы не путал никого. Полный вызов у меня выглядит так:
      [[!pdoPage?
                                          &class=`modUser`
                                          &tpl=`tpl.users.row`
                                          &element=`pdoFetch`
                                          
                                          &leftJoin=`{
                                      		"Operations": {
                                      			"class": "PointsOperations",
                                      			"on": "modUser.id = Operations.user_id"
                                      		},
                                      		"Attributes": {
                                      			"class": "modUserProfile",
                                      			"on": "modUser.id = Attributes.id"
                                      		},
                                      		"Group": {
                                      			"class": "modUserGroupMember",
                                      			"on": "modUser.id = Group.member"
                                      		}
                                      	}`
                                      	&select=`{
                                      		"modUser" : "*",
                                      		"Operations" : "SUM(CASE WHEN operation = 1 THEN points ELSE 0 END) as points_adds, SUM(CASE WHEN operation = 2 THEN points ELSE 0 END) as points_removes,SUM(CASE WHEN operation = 1 THEN points ELSE 0 END) - SUM(CASE WHEN operation = 2 THEN points ELSE 0 END) as points_total",
                                      		"Attributes" : "fullname, website"
                                      	}`
                                      	&groupby=`modUser.id`
                                      	&where=`{"Group.user_group": 2}`
                                      ]]
        Василий Наумкин
        25 января 2016, 17:19
        0
        Всё тоже самое можно сделать и через pdoResources и через pdoUsers. Они точно также умеют присоединять таблицы и используют pdoFetch->run().
          Владислав
          25 января 2016, 17:25
          0
          И правда… Поменял на &element=`pdoUsers`, все выводится точно так же.
            Василий Наумкин
            25 января 2016, 17:27
            0
            Можно еще и несколько параметров убрать, ибо pdoUsers сам делает некоторые присоединения.
              Владислав
              25 января 2016, 17:34
              0
              Да…
              [[!pdoPage?
                                                  &class=`modUser`
                                                  &tpl=`tpl.users.row`
                                                  &element=`pdoUsers`
                                                  &groups=`client`
                                                  &leftJoin=`{
                                              		"Operations": {
                                              			"class": "PointsOperations",
                                              			"on": "modUser.id = Operations.user_id"
                                              		},
                                              		"Attributes": {
                                              			"class": "modUserProfile",
                                              			"on": "modUser.id = Attributes.id"
                                              		}
                                              	}`
                                              	&select=`{
                                              		"Operations" : "SUM(CASE WHEN operation = 1 THEN points ELSE 0 END) as points_adds, SUM(CASE WHEN operation = 2 THEN points ELSE 0 END) as points_removes,SUM(CASE WHEN operation = 1 THEN points ELSE 0 END) - SUM(CASE WHEN operation = 2 THEN points ELSE 0 END) as points_total",
                                              		"Attributes" : "fullname, website"
                                              	}`
                                              	&groupby=`modUser.id`
                                              ]]
              Единственное оставил
              &leftJoin=`{
                                              		"Attributes": {
                                              			"class": "modUserProfile",
                                              			"on": "modUser.id = Attributes.id"
                                              		}
                                              	}`
              И дальнейший
              &select=`{
                                              		
                                              		"Attributes" : "fullname, website"
                                              	}`
              Так вероятно будет быстрее работать если выводить только нужные поля, а не все.
                Василий Наумкин
                25 января 2016, 17:43
                0
                modUserProfile всё равно будет выбираться по умолчанию, но сейчас ты еще добавил Attributes. Так что, Attributes лучше убрать и указать
                &select=`{"modUserProfile":"fullname,website"}`

                Проконтролировать правильность построения запроса можно через
                &showLog=`1`
                Там же можно посмотреть на скорость выборки.
                  Владислав
                  25 января 2016, 17:49
                  0
                  Сократился вызов сниппета вдвое)
                  Больше спасибо за наводки и подсказки!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
10