续集查询多对多关系和访问对象

我有一个案例,我从两个表中查询信息,这个表与“through”表有多对多的关系。 当我做我的查询看来,我正在查询正确的查询不使用“通过”表作为表连接参考和接收与两个表属性输出的logging,但我无法访问连接表的字段属性。 这里是输出的值。

{"fullNameSlug":"Tester Test","email":"test@test.com","firstName":"Tester","lastName":"Test","teams":[{"teamName":"Sales","member":{"memberId":1,"memberEmail":"test@test.com","organizationId":1,"teamId":1,"userId":1,"created_at":"2016-08-21T21:15:19.000Z","updated_at":"2016-08-21T22:00:32.000Z","organization_id":1,"team_id":1,"user_id":1}}]} 

这是我的查询,我如何设置数据:

 .get(function(req, res){ models.User.find({ where: { organizationId: organization.organizationId }, attributes: ['email', 'firstName', 'lastName'], include: [{ model: models.Team, attributes: ['teamName'] }] }); }).then(function(currentUsers){ res.jsonp(currentUsers); console.log(currentUsers); }); 

以下是我在视图中尝试访问teamName的方法: {{currentUsers.teams.teamName}} ,它不返回值,但{{currentUsers.email}}返回正确的用户电子邮件。

用户表:

 module.exports = function(sequelize, DataTypes) { var User = sequelize.define('user', { userId: { type: DataTypes.INTEGER, field:'user_id', autoIncrement: true, primaryKey: true }, firstName: { type: DataTypes.STRING, field: 'first_name' }, lastName: { type: DataTypes.STRING, field: 'last_name' }, email: { type: DataTypes.STRING, isEmail: true, unique: true, set: function(val) { this.setDataValue('email', val.toLowerCase()); } }, password: DataTypes.STRING, organizationId: { type: DataTypes.INTEGER, field: 'organization_id', allowNull: true } }, { underscored: true, freezeTableName: true, }, classMethods: { associate: function(db) { User.belongsToMany(db.Organization, { through: 'member', foreignKey: 'user_id'}), User.belongsToMany(db.Team, { through: 'member', foreignKey: 'user_id'}) } }); return User; } 

队表:

 module.exports = function(sequelize, DataTypes) { var Team = sequelize.define('team', { teamId: { type: DataTypes.INTEGER, field: 'team_id', autoIncrement: true, primaryKey: true, notNull: true }, teamName: { type: DataTypes.STRING, field: 'team_name' }, organizationId: { type: DataTypes.INTEGER, field: 'organization_id' }, },{ underscored: true, freezeTableName: true, classMethods: { associate: function(db) { Team.belongsToMany(db.User, { through: 'member', foreignKey: 'team_id' }); }, } }); return Team; } 

会员表:

 module.exports = function(sequelize, DataTypes) { var Member = sequelize.define('member', { memberId: { type: DataTypes.INTEGER, field: 'member_id', autoIncrement: true, primaryKey: true }, memberEmail: { type: DataTypes.STRING, field: 'member_email', isEmail: true, unique: true }, organizationId: { type: DataTypes.INTEGER, field: 'organization_id', allowNull: true }, teamId: { type: DataTypes.INTEGER, field: 'team_id', allowNull: true }, userId: { type: DataTypes.INTEGER, field: 'user_id', allowNull: true } },{ underscored: true, freezeTableName: true, }); return Member; } 

输出的SQL:

 SELECT `user`.*, `teams`.`team_id` AS `teams.teamId`, `teams`.`team_name` AS `teams.teamName`, `teams.member`.`member_id` AS `teams.member.memberId`, `teams.member`.`member_email` AS `teams.member.memberEmail`, `teams.member`.`organization_id` AS `teams.member.organizationId`, `teams.member`.`team_id` AS `teams.member.teamId`, `teams.member`.`user_id` AS `teams.member.userId`, `teams.member`.`created_at` AS `teams.member.created_at`, `teams.member`.`updated_at` AS `teams.member.updated_at`, `teams.member`.`organization_id` AS `teams.member.organization_id`, `teams.member`.`team_id` AS `teams.member.team_id`, `teams.member`.`user_id` AS `teams.member.user_id` FROM (SELECT `user`.`user_id` AS `userId`, `user`.`email`, `user`.`first_name` AS `firstName`, `user`.`last_name` AS `lastName` FROM `user` AS `user` WHERE `user`.`organization_id` = 1 LIMIT 1) AS `user` LEFT OUTER JOIN (`member` AS `teams.member` INNER JOIN `team` AS `teams` ON `teams`.`team_id` = `teams.member`.`team_id`) ON `user`.`userId` = `teams.member`.`user_id`; 

考虑你的关系,用户有很多团队槽表成员和你的查询返回用户与许多团队(团队对象数组)。 你应该使用user.teams[0].teamName来通过键来获得特定的团队,或者在这个数组中循环对象