@ddgryaz

Как в Sequelize реализовать многие ко многим?

Всем привет, подскажите пожалуйста, что делаю не правильно?

Файл с моделями

const sequelize = require('../db')
const {DataTypes} = require('sequelize')

const User = sequelize.define('user', {
    id: {type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true},
    login: {type: DataTypes.STRING, unique: true},
    password: {type: DataTypes.STRING},
    role: {type: DataTypes.STRING, defaultValue: 'USER'},
    img : {type: DataTypes.STRING, defaultValue: 'default_avatar.jpg'},
    deleted: {type: DataTypes.BOOLEAN, defaultValue: false},
})

const Brain = sequelize.define('brain', {
    id: {type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true},
    name: {type: DataTypes.STRING, unique: true},
    img: {type: DataTypes.STRING, allowNull: false},
    description: {type: DataTypes.TEXT, defaultValue: 'Упс, администратор еще не заполнил описание Брейна.'},
})


const Comment = sequelize.define('comment', {
    id: {type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true},
    comment: {type: DataTypes.STRING},
})

const UserBrain = sequelize.define('user_brain', {
    id: {type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true},
})

User.belongsToMany(Brain, {through: UserBrain})
Brain.belongsToMany(User, {through: UserBrain})

User.hasMany(Comment)
Comment.belongsTo(User)


module.exports = {
    User,
    Brain,
    Comment,
    UserBrain
}



Мой вопрос связан с таблицей, связи у которой - многие ко многим. На выходе я получил табличку PostgreSQL :
Таблица

60a0fa4043d21277829134.png

Я предполагаю, что правильно в файле моделей проложил связи, ведь поля: userId и brainId создались.
Я написал контроллер на создание и получение записей, вот его код:
Контроллер таблицы многие ко многим

const {UserBrain} = require('../models/models')
const ApiError = require('../error/ApiError')
const {Brain, User} = require('../models/models')

class userBrainController {
    async create(req, res, next) {
        try {
            let {userId, brainId} = req.body
            const userBrain = await UserBrain.create({userId, brainId})
            return res.json(userBrain)
        } catch (e) {
            next(ApiError.badRequest(e.message))
        }
    }

    async getOneUserBrains(req, res, next) {
        try {
            const {userId} = req.body
            const userBrain = await UserBrain.findAll(
                {
                    where: {userId},
                    include: [{
                        model: Brain,
                        required: true
                    }]
                },

            )
            return res.json(userBrain)
        } catch (e) {
            next(ApiError.badRequest(e.message))
        }

    }
}

module.exports = new userBrainController()



С контроллером на создание записи все работает, по этому пункту вопросов у меня нет. А вот с контроллером на получение, странная история. Когда я стучусь по АПИшке, в ответ я получаю:

"message": "brain is not associated to user_brain!"


Т.е. как будто бы, в данной таблице нет связи с таблицей brain.
При этом без include я успешно получу данные из таблицы. Но в дальнейшем мне необходимо использовать параметры из таблицы brain.

Подскажите, что я делаю не так?
Всем спасибо!
  • Вопрос задан
  • 96 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы