[英]Sequelize.js One-to-Many relationship foreign key
我正在使用Node.js / Express和MySQL与Sequelize.js ORM创建一个调查应用程序。
我无法正确设置两个模型之间的关系。 我想要答案表中有问题的qId外键。
// 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 |
+-----+------------------------+-----+--------------+--------------+------+
我已经看了几个小时的文档,任何帮助将不胜感激:)谢谢。
您的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);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.