Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Sequelize.js一对多关系外键_Javascript_Mysql_Node.js_Express_Sequelize.js - Fatal编程技术网

Javascript Sequelize.js一对多关系外键

Javascript Sequelize.js一对多关系外键,javascript,mysql,node.js,express,sequelize.js,Javascript,Mysql,Node.js,Express,Sequelize.js,我正在使用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}, questi

我正在使用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;

这个查询将向您显示这一点

| 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);
  });
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);
  });