我正在使用Node.js / Express和MySQL与Sequelize.js ORM创建一个调查应用程序。
我无法正确设置2个模型之间的关系。我想提出问题'在答案表中输入外键。
// define the Questions table
var Questions = sequelize.define('Questions', {
qId: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true},
question: Sequelize.STRING
}, {
timestamps: false
});
// define the Answers table
var Answers = sequelize.define('Answers', {
aId: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true},
answer: Sequelize.STRING,
answer_count: { type: Sequelize.INTEGER, defaultValue: 0}
}, {
timestamps: false
});
// define one-to-many relationship
Questions.hasMany(Answers, {as: 'Answers', foreignKey: 'qId'});
Questions.sync({force: true}).then(function() {
// OPTIONAL: create a new question upon instantiating the db using sequelize
Questions.create({question: 'what is your language?'});
Questions.create({question: 'what is your drink?'});
console.log('created Questions table');
}).catch(function(error) {
console.log('error creating Questions table');
});
Answers.sync({force: true}).then(function() {
Answers.create({answer: 'python', qId: 1});
Answers.create({answer: 'javascript', qId: 1});
Answers.create({answer: 'ruby', qId: 1});
Answers.create({answer: 'c++', qId: 1});
Answers.create({answer: 'manhattan', qId: 2});
Answers.create({answer: 'cosmopolitan', qId: 2});
console.log('created Answers table');
}).catch(function(error) {
console.log('error creating Answers table');
});
但是当我做MySQL查询时:
select * from Questions, Answers where Answers.qId=2;
它显示以下内容:
mysql> select * from Answers;
+-----+--------------+--------------+------+
| aId | answer | answer_count | qId |
+-----+--------------+--------------+------+
| 1 | python | 0 | 1 |
| 2 | javascript | 0 | 1 |
| 3 | ruby | 0 | 1 |
| 4 | c++ | 0 | 1 |
| 5 | manhattan | 0 | 2 |
| 6 | cosmopolitan | 0 | 2 |
+-----+--------------+--------------+------+
6 rows in set (0.00 sec)
mysql> select * from Questions;
+-----+------------------------+
| qId | question |
+-----+------------------------+
| 1 | what is your language? |
| 2 | what is your drink? |
+-----+------------------------+
2 rows in set (0.00 sec)
mysql> select * from Questions, Answers where Answers.qId=2;
+-----+------------------------+-----+--------------+--------------+------+
| qId | question | aId | answer | answer_count | qId |
+-----+------------------------+-----+--------------+--------------+------+
| 1 | what is your language? | 5 | manhattan | 0 | 2 |
| 1 | what is your language? | 6 | cosmopolitan | 0 | 2 |
| 2 | what is your drink? | 5 | manhattan | 0 | 2 |
| 2 | what is your drink? | 6 | cosmopolitan | 0 | 2 |
+-----+------------------------+-----+--------------+--------------+------+
当我想要显示
时mysql> select * from Questions, Answers where Answers.qId=2;
+-----+------------------------+-----+--------------+--------------+------+
| qId | question | aId | answer | answer_count | qId |
+-----+------------------------+-----+--------------+--------------+------+
| 2 | what is your drink? | 5 | manhattan | 0 | 2 |
| 2 | what is your drink? | 6 | cosmopolitan | 0 | 2 |
+-----+------------------------+-----+--------------+--------------+------+
我现在已经查看了几个小时的文档,我们非常感谢任何帮助:) 谢谢。
答案 0 :(得分:1)
你的sql查询应该是;
SELECT * FROM Questions, Answers WHERE Answers.qId = 2 GROUP BY Answers.aId;
或
SELECT * FROM Questions, Answers WHERE Answers.qId = Questions.qId and Questions.qId = 2;
此查询将显示此信息;
| qId | question | aId | answer | answer_count | qId |
|-----|---------------------|-----|---------------|--------------|-----|
| 2 | what is your drink? | 5 | manhattan | 0 | 2 |
| 2 | what is your drink? | 6 | cosmopolitan | 0 | 2 |
你应该追加这个联想;
Answer.belongsTo(Question, {
"constraints": true,
"foreignKey": 'qId'
});
你应该能够像这样使用这种关系/加入;
Question
.findOne({
"where": {
"qId": 2
},
"include": [Answer]
})
.then(function(question) {
// should show question with its answers
console.log(question);
// should show just answers of this question
console.log(question.Answers);
});