您可以使用 Sequelize.js 隐藏来自(非自动生成的)连接 table 的输出吗?
Can you hide output from a (not-automatically generated) join table using Sequelize.js?
我正在使用带有 Sequelize 作为 ORM 的 Feathersjs 后端框架。使用 Sequelize join tables 的 n:m 关系可以生成 'automatically' (从这里称为 'Approach A')与 belongsToMany
关联,但是我遵循了一个也提倡的替代方案方法 ('Approach B'),即明确定义连接 table 与 2 belongsTo
关联,并使用来自您要加入的两个 table 的 hasMany
关联联合table。
这很好用。但是我的输出看起来像这样:
{
"id": 1,
"user_id": 2,
"group_id": 1,
"Venues": [
{
"id": 1,
"capacity": "400",
"venue_name": "Club Lotte",
"venue_description": "Club in Rotterdam",
"EmployeeVenues": {
"employee_id": 1,
"venue_id": 1
}
},
{
"id": 2,
"capacity": "400",
"venue_name": "Club Dino",
"venue_description": "Club in Rotterdam",
"EmployeeVenues": {
"employee_id": 1,
"venue_id": 2
}
}
]
}
我希望它看起来像这样:
{
"id": 1,
"user_id": 2,
"group_id": 1,
"Venues": [
{
"id": 1,
"capacity": "400",
"venue_name": "Club Lotte",
"venue_description": "Club in Rotterdam"
},
{
"id": 2,
"capacity": "400",
"venue_name": "Club Dino",
"venue_description": "Club in Rotterdam"
}
]
}
使用时Approach A this exact same issue can be solved using the through: { attributes: [] }
in the query。这也可以使用方法 B 实现吗?
需要使用属性
Model.findAll({
attributes: ['foo'],
include: {
attributes: ['bar'],
model: JoinModelName,
},
});
方法 B 使用中间模型并使用 belongsTo
。 sequelize 中没有任何特性(有点牵连到问题中)支持省略中间模型的输出(连接 table)。我浏览了sequelize代码,没有找到'such thing'。 Eric Katz 的教学视频(我在 m:n 上用 sequelize 找到了其中的 3 个)也没有显示这种方法。他只是简单地用 forEach 语句处理输出以获得他想要的输出。请参阅此图片的底部。
简而言之:方法 B 的续集中没有这样的功能。
我正在使用带有 Sequelize 作为 ORM 的 Feathersjs 后端框架。使用 Sequelize join tables 的 n:m 关系可以生成 'automatically' (从这里称为 'Approach A')与 belongsToMany
关联,但是我遵循了一个也提倡的替代方案方法 ('Approach B'),即明确定义连接 table 与 2 belongsTo
关联,并使用来自您要加入的两个 table 的 hasMany
关联联合table。
这很好用。但是我的输出看起来像这样:
{
"id": 1,
"user_id": 2,
"group_id": 1,
"Venues": [
{
"id": 1,
"capacity": "400",
"venue_name": "Club Lotte",
"venue_description": "Club in Rotterdam",
"EmployeeVenues": {
"employee_id": 1,
"venue_id": 1
}
},
{
"id": 2,
"capacity": "400",
"venue_name": "Club Dino",
"venue_description": "Club in Rotterdam",
"EmployeeVenues": {
"employee_id": 1,
"venue_id": 2
}
}
]
}
我希望它看起来像这样:
{
"id": 1,
"user_id": 2,
"group_id": 1,
"Venues": [
{
"id": 1,
"capacity": "400",
"venue_name": "Club Lotte",
"venue_description": "Club in Rotterdam"
},
{
"id": 2,
"capacity": "400",
"venue_name": "Club Dino",
"venue_description": "Club in Rotterdam"
}
]
}
使用时Approach A this exact same issue can be solved using the through: { attributes: [] }
in the query。这也可以使用方法 B 实现吗?
需要使用属性
Model.findAll({
attributes: ['foo'],
include: {
attributes: ['bar'],
model: JoinModelName,
},
});
方法 B 使用中间模型并使用 belongsTo
。 sequelize 中没有任何特性(有点牵连到问题中)支持省略中间模型的输出(连接 table)。我浏览了sequelize代码,没有找到'such thing'。 Eric Katz 的教学视频(我在 m:n 上用 sequelize 找到了其中的 3 个)也没有显示这种方法。他只是简单地用 forEach 语句处理输出以获得他想要的输出。请参阅此图片的底部。
简而言之:方法 B 的续集中没有这样的功能。