Sequelize: упорядочение по вложенным ассоциациям - PullRequest
1 голос
/ 24 мая 2019

У меня есть 4 таблицы:

ChatRooms
Participants
Messages
Users
  1. У ChatRoom много участников
  2. В ChatRoom много сообщений
  3. У пользователя много сообщений
  4. У пользователя много участников
  5. Участник принадлежит пользователю
  6. Сообщение принадлежит пользователю

Я пытаюсь использовать 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. Я могу сделать это в отдельном запросе, если это необходимо, и я также открыт для разработки схемы другим способом.

1 Ответ

0 голосов
/ 25 мая 2019

Я обнаружил, что мой опубликованный код работает.Проблема заключается в том, что когда я использовал limit (который я упустил для простоты), он выполняет подзапрос и вызывает ошибку «Не найден столбец».

Я попытался subQuery: false, ноэто все еще не позволило мне объединить лимит с ордером.

...