Ассоциации с таблицами-мусорками Sequelize ORM

Работаю с sequelize и до меня немного не доходит, как обращаться к таблицам, которые связаны с промежуточными таблицами.(junction table)

Пример отношений:схема отношений таблиц

Я хочу получить данные таблиц upload и expertReport через School.

const subjectData = await School.findAll({
            include: [
                {
                    model: Subject,
                    where: { id: request.params.subjectId }
                }
            ],
            through: {
                attributes: ['canUpload'],
                include: [Upload, ExpertReport],
            },
            where: { userId: request.user.id }
        })

Получаю лишь School, Subject и SchoolSubject, но не Upload и ExpertReport. Если вношу секцию through внутрь Subject, то вылазит ошибка, что TypeError: Cannot read property 'includes' of undefined

Объясните, как это работает в ORM.

Определение моделей из вопроса:

School

module.exports = (sequelize, DataTypes) => {
const School = sequelize.define('School', {
    name: DataTypes.STRING,
    code: DataTypes.INTEGER,
    userId: DataTypes.INTEGER,
})

School.associate = models => {
    School.belongsTo(models.User, {
        foreignKey: 'userId',
        onDelete: 'SET NULL',
    })
    School.belongsToMany(models.Subject, {
        through: 'SchoolSubject',
        foreignKey: 'schoolId',
    })
}

return School

}

SchoolSubject

module.exports = (sequelize, DataTypes) => {
const SchoolSubject = sequelize.define('SchoolSubject', {
    id: {
        type: DataTypes.INTEGER,
        primaryKey: true,
        autoIncrement: true,
        allowNull: false,
    },
    canUpload: DataTypes.BOOLEAN,
})

SchoolSubject.associate = models => {
    SchoolSubject.hasMany(models.Upload, { foreignKey: 'schoolSubjectId' })
    SchoolSubject.hasMany(models.ExpertReport, {
        foreignKey: 'schoolSubjectId',
    })
}

return SchoolSubject

}

Subject

module.exports = (sequelize, DataTypes) => {
const Subject = sequelize.define('Subject', {
    code: DataTypes.INTEGER,
    name: DataTypes.STRING,
    criteriaLink: DataTypes.TEXT,
    exerciseCount: DataTypes.INTEGER,
})

Subject.associate = models => {
    Subject.hasMany(models.Expert, {
        foreignKey: 'subjectId',
        onDelete: 'SET NULL',
    })
    Subject.hasMany(models.Test, {
        foreignKey: 'subjectId',
        onDelete: 'SET NULL',
    })
    Subject.belongsToMany(models.School, {
        through: 'SchoolSubject',
        foreignKey: 'subjectId',
    })
}

return Subject

}

Upload

module.exports = (sequelize, DataTypes) => {
const Upload = sequelize.define('Upload', {
    fileCount: DataTypes.INTEGER,
    schoolSubjectId: DataTypes.INTEGER,
    isComplete: DataTypes.BOOLEAN,
})

Upload.associate = models => {
    Upload.belongsTo(models.SchoolSubject, {
        foreignKey: 'schoolSubjectId',
        onDelete: 'CASCADE',
    })
    Upload.hasMany(models.Test, {
        foreignKey: 'uploadId',
        onDelete: 'SET NULL',
    })
}

return Upload

}


Ответы (0 шт):