gpt4 book ai didi

node.js - Sequelize ORM - 包含两个关系作为单个父属性

转载 作者:行者123 更新时间:2023-12-03 22:36:55 25 4
gpt4 key购买 nike

我有一个包含三个模型的架构:学校 , 一个 教师 , 和 学生 .
一所学校可以有多名教师和多名学生。

我可以得到 schools 的列表用这样的 Sequelize :

return School.findAll({
include: [
{ model: Teacher },
{ model: Student },
],
});

这会导致这样的 JSON:
[{
id: 'dc85fe6a-c009-4055-9852-e2c3c0b37e9b,
teachers: [ ... ],
students: [ ... ]
}]

现在,我希望 JSON 还包含一个名为 people 的属性。包括 session 的 teachersstudents .
换句话说,JSON 应该是这样的:
[{
id: 'dc85fe6a-c009-4055-9852-e2c3c0b37e9b,
people: [ ... ], // Should contain teachers and students.
teachers: [ ... ],
students: [ ... ]
}]

我怎样才能将多个关系“包含”到这样的单个属性中?
任何帮助将不胜感激。

最佳答案

我认为您无法使用 sequelize 实现这一目标。但是,您的用例通常会使用继承模式更好地工作。想一想,学生和老师有什么共同点?他们都是人,所以一个人所具有的任何属性都是双方共有的。

这是我要做的:

  • 有一个名为 Person 的模型, 包含所有常见属性(名字、姓氏、出生日期...)
  • 还有另外两个型号,StudentTeacher , 包含特定属性
  • 定义 one to one Student 之间的关系/TeacherPerson .请注意,您只能以一种方式定义它(StudentPerson,但 Person 并不总是 Student )
  • 定义一个 one to many来自 School 的关系至Person .

  • 这样,您将能够通过执行以下操作来实现您想要的:
    return School.findAll({
    include: [
    {
    model: Person,
    include: [
    { model: Teacher },
    { model: Student },
    ]
    },
    ],
    });

    而且,恕我直言,我相信这个模型更适合标准化。

    关于node.js - Sequelize ORM - 包含两个关系作为单个父属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58213591/

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