У меня есть 4 таблицы, запрошенные с использованием комбинации запросов sql, knex и objection.js. Пользователи и группы связаны по членству и сообщениям, которые принадлежат группам
Первичные / Внешние ключи
Пользователи: id, has_many Группы через членство в группах: id, has_many Пользователи через членство Членство: id, groups_id, users_id
Сообщений: id, users_id, groups_id
Я пытаюсь вернуть все сообщения, принадлежащие всем группам, членом которых является пользователь.
Следующеезапрос возвращает сообщения, но не предоставляет все необходимые мне поля:
SELECT users.username, users.avatar_url, posts.id, posts.body, posts.users_id, posts.groups_id FROM posts INNER JOIN memberships ON posts.groups_id = memberships.groups_id JOIN users on memberships.users_id = users.id WHERE memberships.users_id = ${userId}
В частности, запрос возвращает аватар для current_user с id: userId вместо возврата информации о пользователе, связанной сконкретный пост.
Вот ответ на запрос:
Result {
command: 'SELECT',
rowCount: 9,
oid: null,
rows:
[ { username: 'usersix',
avatar_url: 'https://image.flaticon.com/icons/svg/145/145864.svg',
id: 1,
body: 'user 1 comments to group 1',
users_id: 1,
groups_id: 1 },
{ username: 'usersix',
avatar_url: 'https://image.flaticon.com/icons/svg/145/145864.svg',
id: 3,
body: 'user 1 comments to group 1 #2',
users_id: 1,
groups_id: 1 },
{ username: 'usersix',
avatar_url: 'https://image.flaticon.com/icons/svg/145/145864.svg',
id: 4,
body: 'user 2 comments to group 1',
users_id: 2,
groups_id: 1 },
{ username: 'usersix',
avatar_url: 'https://image.flaticon.com/icons/svg/145/145864.svg',
id: 6,
body: 'user 3 comments to group 1',
users_id: 3,
groups_id: 1 },
{ username: 'usersix',
avatar_url: 'https://image.flaticon.com/icons/svg/145/145864.svg',
id: 10,
body: 'user 5 comments to group 1',
users_id: 5,
groups_id: 1 },
{ username: 'usersix',
avatar_url: 'https://image.flaticon.com/icons/svg/145/145864.svg',
id: 12,
body: 'user 6 comments to group 1',
users_id: 6,
groups_id: 1 },
{ username: 'usersix',
avatar_url: 'https://image.flaticon.com/icons/svg/145/145864.svg',
id: 16,
body: 'user 8 comments to group 1',
users_id: 8,
groups_id: 1 },
{ username: 'usersix',
avatar_url: 'https://image.flaticon.com/icons/svg/145/145864.svg',
id: 18,
body: 'test\n',
users_id: 8,
groups_id: 1 },
{ username: 'usersix',
avatar_url: 'https://image.flaticon.com/icons/svg/145/145864.svg',
id: 19,
body: 'another test',
users_id: 8,
groups_id: 1 } ],
fields:
[ Field {
name: 'username',
tableID: 31280,
columnID: 2,
dataTypeID: 1043,
dataTypeSize: -1,
dataTypeModifier: 259,
format: 'text' },
Таким образом, в приведенных выше данных этот запрос от usersix, который принадлежит только к группе 1. Как и ожидалось, всепосты имеют groups_id = 1, однако все avatar_urls такие же, как и имя пользователя.
И наконец, вот несколько примеров, описывающих отношения между публикациями и пользователями:
{
"id": 1,
"body": "user 1 comments to group 1",
"users_id": 1,
"created_at": null,
"updated_at": null,
"groups_id": 1,
"user": {
"id": 1,
"username": "userone",
"email": "userone@gmail.com",
"password": "$2a$10$tiTQXusc4msyM0/73YfZAensmiCEI3FrTjP/JLS9nRctnut9x7od.",
"created_at": null,
"updated_at": null,
"avatar_url": "https://image.flaticon.com/icons/svg/145/145867.svg",
"bio": "Lorem ipsum dolor amet vexillologist bitters pickled 90's put a bird on it mlkshk street art squid lyft butcher prism. Kombucha tousled chicharrones keytar semiotics flexitarian, pinterest copper mug asymmetrical VHS. Chartreuse vaporware copper mug raclette, PBR&B pinterest keytar farm-to-table bicycle rights pitchfork poke kogi. Cornhole flexitarian deep v, post-ironic art party artisan edison bulb etsy. Schlitz VHS shabby chic lomo.",
"location": "New York, NY"
}
},
Я пытаюсь выяснить, как получить связанные поля в таблице соединений.