Node.js 使用include从sequelize访问内部联接数据

Node.js 使用include从sequelize访问内部联接数据,node.js,handlebars.js,sequelize.js,Node.js,Handlebars.js,Sequelize.js,我尝试使用Sequelize的include连接两个表,如下所示: models.user.findAll({include: {model: models.boardMember, required:true}}) .then(function(board) { console.log(board); res.render('contact', { title: 'Kontakt', board: board }); }); 我的模型使用以下选

我尝试使用Sequelize的include连接两个表,如下所示:

  models.user.findAll({include: {model: models.boardMember, required:true}})
    .then(function(board) {
       console.log(board);
       res.render('contact', { title: 'Kontakt', board: board });
    });
我的模型使用以下选项如下所示:

用户(在这里使用hasMany而不是在boardMembers中感觉不太对,但我不想在users表中使用外键字段)

董事会成员

module.exports = function(sequelize, DataTypes) {
  var boardMember = sequelize.define('boardMember', {
    post: {
      type: DataTypes.STRING,
      unique: false,
      allowNull: false
    }
  });
  return boardMember;
};
然后,我想使用手柄访问表中返回的数据:

{{#each board}}
  <tr>
    <td>{{boardMembers.post}}</td>
    <td>{{firstName}} {{surName}}</td>
    <td>{{email}}</td>
  </tr>
{{/each}}
console.log输出如下内容(数据明显更改):

非常感谢您的帮助

谢谢

Freece

根据,include属性的值是一个列表

您可以尝试使用特殊值
include:[{all:true,nested:true}]
并查看它是否适合您


此外,您的模板存在问题,因为您建立了一对多关系,因此模型实例的
boardMemebers
属性是数组。

Hmm很抱歉,它不起作用。尝试使用以下命令:'models.user.findAll({include:[{nested:true,all:true,model:models.boardMember,required:true}]})和它的几个不同版本。谢谢你的提示!如果使用all:true选项,则不需要指定模型。从您的问题中我可以看到,您正在检索相关的boardMember(响应数组上的
boardMembers:[Object]
),但在您的模板中,您将boardMember属性视为一个对象,但关系是多目的,这是正确的。我一直用错误的方式思考这个问题。我已经意识到我需要做的是创建一个定制的把手助手。
{{#each board}}
  <tr>
    <td>{{boardMembers.post}}</td>
    <td>{{firstName}} {{surName}}</td>
    <td>{{email}}</td>
  </tr>
{{/each}}
SELECT 
    `user`.`id`, `user`.`username`, `user`.`password`, 
    `user`.`firstName`, `user`.`surName`, `user`.`email`, `user`.`access`,  
    `boardMembers`.`id` AS `boardMembers.id`, `boardMembers`.`post` AS `boardMembers.post`,  
    `boardMembers`.`userId` AS `boardMembers.userId` 
FROM 
    `users` AS `user` 
INNER JOIN 
    `boardMembers` AS `boardMembers` ON `user`.`id` = `boardMembers`.`userId`;
[ Instance {
dataValues:
 { id: 2,
   username: 'username',
   password: 'hashedPassword',
   firstName: 'User',
   surName: 'Name',
   email: 'user@name.com',
   access: '0',
   boardMembers: [Object] },
...
]