gpt4 book ai didi

node.js - 如何使用 Sequelize 从关联模型中添加字段?

转载 作者:行者123 更新时间:2023-12-03 22:32:51 24 4
gpt4 key购买 nike

我正在使用 Node、Express 和 Sequelize 制作 Web API。我有模型用户和团队(如下所示)。用户有一个引用 Teams.id 的 teamId,并且两者之间存在关联以反射(reflect)这一点。
用户定义

const User = sequelize.define('User', {
id: {
autoIncrement: true,
type: DataTypes.INTEGER,
allowNull: false,
primaryKey: true
},
displayName: {
type: DataTypes.STRING,
allowNull: false
},
teamId: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: 'Team',
key: 'id'
}
}
}

团队定义
const Team = sequelize.define('Team', {
id: {
autoIncrement: true,
type: DataTypes.INTEGER,
allowNull: false,
primaryKey: true
},
name: {
type: DataTypes.STRING,
allowNull: false
}
}

协会
User.belongsTo(Team, { as: 'team', foreignKey: 'teamId' });

询问
Users.findAll({
include: [
{
model: Team,
as: 'team'
}
]
});

正如预期的那样,这将返回一个 User 对象列表,其中添加了“team”属性,嵌入了相应的 Team 对象,如下所示:
[
{
"id": 1,
"displayName": "John Smith",
"teamId": 1,
"team": {
"id": 1,
"name": "My Awesome Team"
}
}
]

我的目标是返回 User 对象,但不是将整个 Team 对象嵌入到 team 属性下,我只想添加团队的名称作为属性的值,如下所示:
[
{
"id": 1,
"displayName": "John Smith",
"teamId": 1,
"team": "My Awesome Team"
}
]

有没有办法用 Sequelize 来实现这一点?

最佳答案

好吧,通过输入我的问题,我想到了更好的方法来搜索答案,我想我马上就找到了一个……
我发现 this StackOverflow question 提问者正在做我想做的事情。
解决方案是使用attributes.include 和Sequelize.col() 来包含我想要的属性,在我的包含选项中,使用attributes: [] 来隐藏Team 对象。
离开我在原始帖子中包含的示例,这对我有用,给了我几乎我想要的确切输出:

Users.findAll({
attributes:{
include: [[Sequelize.col(team.name), 'teamName']]
}
include: [
{
model: Team,
as: 'team',
attributes: []
}
]
});
输出
[
{
"id": 1,
"displayName": "John Smith",
"teamId": 1,
"teamName": "My Awesome Team"
}
]
由于协会使用别名“team”,我不得不为我的属性(property)命名不同的东西,并使用“teamName”,这非常好,可能更可取,因为它更具描述性。

关于node.js - 如何使用 Sequelize 从关联模型中添加字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65206164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com