最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Sequelize ORM

运维笔记admin12浏览0评论

Sequelize ORM

Sequelize ORM

我有一个具有三个模型的架构:SchoolTeacherStudent。一所学校可以有多个老师和多个学生。

我可以通过Sequelize来获得schools的列表:

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

将这样生成JSON的结果:

[{
    id: 'dc85fe6a-c009-4055-9852-e2c3c0b37e9b,
    teachers: [ ... ],
    students: [ ... ]
}]

[现在,我希望JSON还包括一个名为people的属性,该属性包含会话的teachersstudents。换句话说,JSON应该如下所示:

[{
    id: 'dc85fe6a-c009-4055-9852-e2c3c0b37e9b,
    people: [ ... ], // Should contain teachers and students.
    teachers: [ ... ],
    students: [ ... ]
}]

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

回答如下:

我认为您无法通过续集实现这一目标。但是,使用继承模式通常会使您的用例更好地工作。想一想,学生和老师有什么共同点?他们都是人类,因此人类具有的任何属性都是两者共同的。

这是我要做的:

  • 具有一个名为Person的模型,其中包含所有常用属性(名字,姓氏,出生日期...)
  • 还有另外两个模型,StudentTeacher,包含特定属性
  • 定义one to one / StudentTeacher之间的Person关系。注意,只能以一种方式定义它(StudentPerson,但Person并不总是Student
  • one to manySchool定义Person关系。

这样,您将可以通过执行以下操作来实现所需的目标:

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

而且,恕我直言,我认为该模型在归一化方面会更合适。

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论