node.js - 如何从 Node 和 Sequelize 中的多对多关系中检索额外的列
问题描述
我正在构建一个 Node 应用程序。我正在为数据库使用 Sequelize。现在,我在从多对多关系的数据透视表中检索额外的列/字段时遇到问题。
这是我的用户模型:
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class User extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
* The `models/index` file will call this method automatically.
*/
static associate(models) {
// define association here
User.hasMany(models.VerificationToken, { foreignKey: 'userId', as: "verificationTokens", onDelete: 'cascade' });
User.belongsToMany(models.Role, {
through: "UserRoles",
as: "Roles",
foreignKey: "user_id"
})
User.belongsToMany(models.Team, {
through: "UserTeams",
as: "Teams",
foreignKey: "user_id"
})
}
};
User.init({
name: DataTypes.STRING,
email: DataTypes.STRING,
password: DataTypes.STRING,
verifiedAt: DataTypes.DATE
}, {
sequelize,
modelName: 'User',
});
return User;
};
这是我的团队模型:
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class Team extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
* The `models/index` file will call this method automatically.
*/
static associate(models) {
// define association here
Team.belongsToMany(models.Game, {
through: "GameTeams",
as: "Games",
foreignKey: "team_id"
})
Team.belongsToMany(models.User, {
through: "UserTeams",
as: "Users",
foreignKey: "team_id"
})
}
};
Team.init({
name: DataTypes.STRING,
status: DataTypes.INTEGER,
game_id: DataTypes.INTEGER,
creator_id: DataTypes.INTEGER
}, {
sequelize,
modelName: 'Team',
});
return Team;
};
这是我的用户团队模型:
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class UserTeam extends Model {
static associate(models) {
// define association here
UserTeam.belongsTo(models.User, {
as: "User",
foreignKey: "user_id"
})
UserTeam.belongsTo(models.Team, {
as: "Team",
foreignKey: "team_id"
})
}
};
UserTeam.init({
user_id: DataTypes.INTEGER,
team_id: DataTypes.INTEGER,
status: DataTypes.INTEGER
}, {
sequelize,
modelName: 'UserTeam',
});
return UserTeam;
};
如您所见,UserTeam 数据透视模型有一个名为 status 的额外字段。我正在尝试检索该字段。
我试过这个:
player = await User.findOne({
where: {
id: {
[Op.eq]: player.id
}
},
include: [
{
model: Team,
as: "Teams"
}
]
})
但它没有给我状态栏。这给了我未定义的:
player.Teams[0].UserTeams.status
我也试过这个。
player = await User.findOne({
where: {
id: {
[Op.eq]: player.id
}
},
include: UserTeam
})
但它抛出了这个错误:
SequelizeEagerLoadingError:UserTeam 未与用户关联!
如何从数据透视表中检索额外的状态列?
解决方案
推荐阅读
- javascript - Bcrypt.compare 不比较密码
- reactjs - react-google-maps 点击地图获取坐标
- javascript - 加载页面上所有数据时的 Javascript/JQuery 事件
- ruby - 在 restclient 标头中添加多种内容类型
- mysql - 如果表为空,则插入多条记录
- ios - 如何处理嵌套的 Observable 字段?
- xml - 复制除 XSLT 中的一个以外的所有前缀元素
- database - 在地图容器中放置一个结构 - 或者是否有不同的、更合适的方式来存储这种类型的数据?
- python - 代码不在 sublime 3 上运行,但在在线编译器上运行
- python - Python中具有特定格式的连续日期