【问题标题】:sequelize eager loading through intermediate model通过中间模型对急切加载进行续集
【发布时间】:2016-11-30 18:30:45
【问题描述】:

我有 3 个模型:

模型A、模型B和模型C

  • 模型A 属于多模型B (n:m)
  • ModelB 属于模型A (m:n)
  • ModelB 属于 ModelC (n:1)
  • ModelC 有很多 ModelB (1:n)

我需要一个 ModelA 和它的所有 ModelC(通过 ModelB)

我相信是这样的,但我无法让它工作,当创建关联 through sequelize 创建奇怪的foreignKeys 并且关于这个主题的 Sequelize 文档对我的口味来说非常不完整

ModelA.findOne({
  where: ...,
  include: [
    {
      model: ModelC,
      through: ...
    }
  ]
});

编辑:我将所有实体更改为模型 A、B、C,因为这是关于 Sequelize API 的问题/问题;与数据库/模型设计无关

【问题讨论】:

    标签: node.js sequelize.js eager-loading


    【解决方案1】:

    您的User 模型与您的Company 模型没有直接关系,但您可以使用嵌套包含通过Role 获得Company

    User.findOne({
      where: ...,
      include: [
        {
          model: Role,
          include: [
             { 
                model: Company, 
                ...
             }
          ]
        }
      ]
    });
    

    【讨论】:

    • 是的,但这会让我重复公司,而且他们甚至不直接在角色中(当他们应该是)
    • 这没什么疯狂的,它是一个相当标准的映射,其他 ORM 可以很容易地进行这种查询,我相信 Sequelize 有办法但不是很清楚
    • 您的Role 模型应该与CompanybelongsTo 关系相关。 belongsToMany 表示many-to-many 关系
    • 角色只属于一家公司。例如:A公司有一个角色“主管”,B公司也有一个角色“主管”,但它们是不同的“主管”角色,因为每个公司都有自己的一组模块和权限。公司 A 和公司 B 不能共享角色
    • 表示可能有:A公司的“主管”角色,拥有X权限,B公司的“主管”角色,拥有Y权限。它们不一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 2016-12-26
    • 1970-01-01
    相关资源
    最近更新 更多