【问题标题】:sequelize.js consecutive many to many relationshipsequelize.js 连续多对多关系
【发布时间】:2016-05-21 06:22:19
【问题描述】:

我有 A、B 和 C 类

A B 和 B C

对于单个A,我想找到所有与A相关的C。

如何编写 sequelize 查询以使其仅执行一次 SQL 调用?

sequelize 中已经定义了多对多关系, 例如,我已经可以执行 a.getBs()、b.getCs() 或 c.getBs()

我显然可以写,

a.getBs()
.then(function(Bs) {
    return foreach(Bs, function(b) {return b.getCs();})
})
.then(function() {
    // flatten array of array of C here.
})

但是这样做的 SQL 请求太多了。

另外,如果我有一个 A 数组怎么办?有没有办法只执行一条 SQL 来返回 {a1: ["c1", "c2"], a2: ["c2", "c99"] ...}

的映射
SELECT A.name, C.name as anotherName
FROM A
LEFT JOIN A_B ON A.id = A_B.A_id
LEFT JOIN B ON A_B.B_id = B.id
LEFT JOIN B_C ON B.id = B_C.B_id
LEFT JOIN C ON C.id = B_C.C_id
GROUP BY name, anotherName

我认为这是我需要的 SQL,不知道如何从 sequelize 生成它。

【问题讨论】:

    标签: javascript sql sequelize.js


    【解决方案1】:

    Sequelize 连接关联主要使用包含和预加载,因此您的查询应该如下所示:

    A.findAll({
      where: { etc... }
      include: [
        {
          association: A.associations.B,
          include: [
            B.associations.C
          ]
        }
      ],
    }).then((results) => {
      console.log(results[0].B[0].C[0]);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-03
      • 2015-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多