Вывод пользователей при помощи pdoFetch
Всем привет!
Нужно сделать вывод пользователей при помощи pdoFetch.
Есть вывод пользователей, который выглядит так
Сейчас нужно сделать фильтрацию по группам пользователей.
Пытаюсь сделать так:
Но вот так
В логах ошибка pdoTools] Error 42S22: Unknown column 'SQL_CALC_FOUND_ROWS user_group' in 'field list'
Нужно сделать вывод пользователей при помощи 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'
Комментарии: 10
[[!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}`
]]
Так работает. Такое впечатление, что пишу сюда вопрос, чтобы сам разобраться и написать сюда ответ)
Вообще-то, в pdoTools есть сниппет pdoUsers.
Знаю, я бы его и использовал, но у меня есть еще свой класс в котором хранятся операции совершенные пользователем, я убрал его здесь, чтобы не путал никого. Полный вызов у меня выглядит так:
[[!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}`
]]
Всё тоже самое можно сделать и через pdoResources и через pdoUsers. Они точно также умеют присоединять таблицы и используют pdoFetch->run().
И правда… Поменял на &element=`pdoUsers`, все выводится точно так же.
Можно еще и несколько параметров убрать, ибо pdoUsers сам делает некоторые присоединения.
Да…
[[!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"
}`
Так вероятно будет быстрее работать если выводить только нужные поля, а не все.
modUserProfile всё равно будет выбираться по умолчанию, но сейчас ты еще добавил Attributes. Так что, Attributes лучше убрать и указать
Проконтролировать правильность построения запроса можно через
&select=`{"modUserProfile":"fullname,website"}`
Проконтролировать правильность построения запроса можно через
&showLog=`1`
Там же можно посмотреть на скорость выборки.
Сократился вызов сниппета вдвое)
Больше спасибо за наводки и подсказки!
Больше спасибо за наводки и подсказки!
На здоровье!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.