Задать вопрос
@jenya7771

Как выполнить group в Sequelize?

Здравствуйте, есть 3 таблицы:

Пользователи:
const users = sequelize.define('users', {
    login: {
        type: Sequelize.STRING,
        allowNull: true,
    },
    email: {
        type: Sequelize.STRING,
        allowNull: true
    },
    password: {
        type: Sequelize.STRING,
        allowNull: false
    }
})


Мессенджеры:
const messengers = sequelize.define('messengers', {
    user_id: {
        type: Sequelize.INTEGER,
        allowNull: false,
        foreignKey: true
    },
    messenger_id: {
		type: Sequelize.STRING,
		allowNull: true
    },
    login: {
		type: Sequelize.STRING, 
		allowNull: true
    }
})


Сообщения:
const messengerMessages = sequelize.define('messenger_messages', {
    messenger_id: {
        type: Sequelize.INTEGER,
        allowNull: false,
        foreignKey: true
    },
    text: {
        type: Sequelize.TEXT,
        allowNull: true
    }
})


И связка этих таблиц:
users.hasMany(messengers, { foreignKey: 'user_id', as: 'userMessenger' })
messengers.belongsTo(users, { foreignKey: 'user_id', as: 'userMessenger' })

messengers.hasMany(messengerMessages, { foreignKey: 'messenger_id', as: 'messengerMessages' })
messengerMessages.belongsTo(messengers, { foreignKey: 'messenger_id', as: 'messengerMessages' })


И мне нужно сгруппировать данные так, что бы получить массивы с сообщениями пользователей, по полю users.id.
Сделал много попыток, перечитал десяток статей, но так и не понял как это реализовать, подскажите, может кто сталкивался с подобным?
await models.messengerMessages.findAll({
            include: [{
                model: models.messengers,
                as: 'messengerMessages',
                include: [{
                    model: models.users,
                    as: 'userMessenger',
                }]
            }],
            group: ['messengerMessages->userMessenger.id']
        })
  • Вопрос задан
  • 810 просмотров
Подписаться 1 Сложный 8 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы