У меня есть 4 таблицы:
ChatRooms
Participants
Messages
Users
- У ChatRoom много участников
- В ChatRoom много сообщений
- У пользователя много сообщений
- У пользователя много участников
- Участник принадлежит пользователю
- Сообщение принадлежит пользователю
Я пытаюсь использовать Sequelize для запроса пользователей, и в соответствии с отношением «Участники» я хочу, чтобы он возвратил список из 10 участников (который по сути является пользователем), упорядоченный ChatRoom, с самым последним сообщением. По сути Участники были бы самыми последними активными ChatRoms.
// My current code is:
User.findAll({
include: [
{
model: Participant,
include: [
{
model: ChatRoom,
include: [{ model: Message}]
}
],
order: [[ChatRoom, Message, 'id', 'DESC']]
}
],
})
// This is what my server is returning right now,
// but the ordering is not working:
// participantId: 2 should be on top as it has a more recent message
{
userId: 1,
name: 'Kevin',
participants: [
{
participantId: 1,
userId: 1,
chatRoomId: 1,
chatRoom:
{
chatRoomId: 1,
Messages: [{
MessageId: 1,
message: 'message1',
userId: 1
},
{
MessageId: 2,
message: 'message2',
userId: 2
}]
}
},
{
participantId: 2,
userId: 1,
chatRoomId: 2,
chatRoom:
{
chatRoomId: 2,
Messages: [{
MessageId: 3,
message: 'message3',
userId: 1
},
{
MessageId: 4,
message: 'message4',
userId: 3
}]
}
}
]
}
Я не знаю, возможно ли то, что я хочу. Важной частью является то, что запрос возвращает ChatRooms с самыми последними сообщениями. Мне не нужно делать это внутри объекта User. Я могу сделать это в отдельном запросе, если это необходимо, и я также открыт для разработки схемы другим способом.