Просто глядя на него, я хотел бы написать код, как этот
db.Workbook.findAll({
attributes: ['wbquestion.question.topic.id', [db.sequelize.fn('COUNT', db.sequelize.col('wbquestion.question.topic.id'))], 'topiccount'],
include: [
{
model: db.WorkbookQuestion,
as: wbquestion,
where: {
id: wbquestion.workbookId
},
include: [
model: db.Question,
as: question,
where: {
id: wbquestion.questionId
},
include: [
model: db.Topic,
as: topic,
where: {
id: question.topicId
}
]
]
}
],
where: {
studentId : 3
}
group: ['topic.id']
});
Может быть, вы можете получить более читаемым кода, определяя модели и отношения отдельно и с помощью нетерпеливой загрузки.
Edit: Сформированные миграциях и модели
node_modules/.bin/sequelize model:create --name Student --attributes firstName:string,lastName:string
node_modules/.bin/sequelize model:create --name Topic --attributes topicText:string
node_modules/.bin/sequelize model:create --name Question --attributes TopicId:integer
node_modules/.bin/sequelize model:create --name Workbook --attributes studentId:integer
node_modules/.bin/sequelize model:create --name WorkbookQuestion --attributes QuestionId:integer,WorkbookId:integer
Простая программа для тестирования запроса в лог консоли.
var Sequelize = require("sequelize");
var models = require('./models/index');
models.WorkbookQuestion.belongsTo(models.Question, {foreignKey: 'QuestionId'});
models.WorkbookQuestion.belongsTo(models.Workbook, {foreignKey: 'WorkbookId'});
models.Question.hasOne(models.WorkbookQuestion);
models.Workbook.hasOne(models.WorkbookQuestion);
models.Workbook.belongsToMany(models.Question, {through: models.WorkbookQuestion});
models.Workbook.belongsToMany(models.Topic, {through: models.Question});
var res = models.Workbook.findAll({
attributes: ['topicId', Sequelize.fn('count', Sequelize.col('topiccount'))],
include: [models.WorkbookQuestion, models.Question, models.Topic],
where: {
studentId: 3
},
group: ['topic.id']
}).then(function(data) {
console.log(data);
}).catch(function(err) {
console.trace(err);
});
Результат:
SequelizeDatabaseError: колонка Topics.Question.WorkbookId не существует
Может быть, вы можете исправить отношения между моделями или вы должны создать запрос, не используя функциональность FindAll.
Любые ошибки? Как выглядит запрос, который Sequelize производит для вашего примера? – tiblu