Я пытаюсь связать 4 таблицы. Задачи, задачи, вопросы и параметры.Sequelize - Сопоставление 4 таблиц
Мои модели являются
Задачи модель:
var Sequelize = require('sequelize');
module.exports = function(sequelize, DataTypes) {
var Task = sequelize.define('Task', {
task_id: {
type: Sequelize.STRING,
primaryKey: true
},
task_name: {
type: Sequelize.STRING,
allowNull: true
},
task_description: {
type: Sequelize.STRING,
allowNull: true
}
},{
classMethods: {
associate: function(models) {
Task.belongsToMany(models.Question, {
through: {
model: models.TaskQuestion
},
foreignKey: 'task_id'
})
}
}
});
return Task;
};
TaskQuestions модель:
var Sequelize = require('sequelize');
module.exports = function(sequelize, DataTypes) {
var TaskQuestion = sequelize.define('TaskQuestion', {
tq_id: {
type: Sequelize.STRING,
primaryKey: true
}
});
return TaskQuestion;
};
Вопросы модели:
var Sequelize = require('sequelize');
module.exports = function(sequelize, DataTypes) {
var Question = sequelize.define('Question', {
question_id: {
type: Sequelize.STRING,
primaryKey: true
},
question_description: {
type: Sequelize.STRING,
allowNull: true
},
question_type: {
type: Sequelize.STRING,
allowNull: true
}
},{
classMethods: {
associate: function(models) {
Question.hasMany(models.Option, {
foreignKey: {
name: 'question_id',
allowNull: false
}
}),
Question.belongsToMany(models.Task, {
through: {
model: models.TaskQuestion
},
foreignKey: 'question_id'
})
}
}
});
return Question;
};
Опции модели:
var Sequelize = require('sequelize');
module.exports = function(sequelize, DataTypes) {
var Option = sequelize.define('Option', {
option_id: {
type: Sequelize.STRING,
primaryKey: true
},
question_id: {
type: Sequelize.STRING,
allowNull: true
},
option_description: {
type: Sequelize.STRING,
allowNull: true
},
option_type: {
type: Sequelize.STRING,
allowNull: true
}
},{
classMethods: {
}
});
return Option;
};
При попытке получить данные
router.get('/:task_id', function(req, res) {
models.Task.findOne({
where: {
task_id: req.params.task_id
},
include: [ models.Question ]
}).then(function(task) {
res.json(task);
});
});
Все, что я получаю связь между Task и вопросы. Когда я получаю ответы на вопросы отдельно, я получаю опции под ним. Но, похоже, не может сразу получить все.
Возможно ли это. И дайте мне знать, следуйте ли вы правильному подходу к созданию базы данных в этом формате.
Мне нужна одна задача, чтобы содержать несколько вопросов, и одни вопросы могут появляться в нескольких задачах. Каждый вопрос должен содержать несколько вариантов.
Он работал. Большое спасибо. :) –