0

我正在使用带有 Sequelize 作为 ORM 的 Feathersjs 后端框架。使用 N:m 关系的 Sequelize 连接表可以通过关联“自动”生成(从此称为“方法 A”)belongsToMany,但是我遵循了一种也提倡的替代方法(“方法 B”),即显式定义连接表2belongsTo关联并使用hasMany要加入联合表的两个表中的关联。

这工作正常。但是我的输出如下所示:

{
    "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"
        }
    ]
}

使用方法 A 时,可以使用查询中的来解决完全相同的问题through: { attributes: [] }。这也可以使用方法 B 来实现吗?

4

2 回答 2

2

需要使用属性

Model.findAll({
    attributes: ['foo'],
    include: {
        attributes: ['bar'],
        model: JoinModelName,
    },
});

http://docs.sequelizejs.com/manual/tutorial/querying.html

于 2018-09-03T15:39:48.173 回答
1

方法 B 使用中间模型并使用belongsTo. sequelize 中没有任何特性(有点牵连到问题中)支持省略中间模型(连接表)的输出。我浏览了续集代码并没有找到“这样的东西”。Eric Katz 的教学视频(我在 m:n 和 sequelize 上找到了其中的 3 个)也没有显示这种方法。他只是简单地使用 forEach 语句处理输出以获得他想要的输出。见这张图片的底部。

在此处输入图像描述

简而言之:方法 B 的续集中没有这样的功能。

于 2018-09-07T20:04:18.033 回答