Ассоциации с таблицами-мусорками 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
}
