Node.js 使用include从sequelize访问内部联接数据
我尝试使用Sequelize的include连接两个表,如下所示: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 }); }); 我的模型使用以下选
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] },
...
]