gpt4 book ai didi

javascript - sequelize.js 连续多对多关系

转载 作者:行者123 更新时间:2023-12-03 22:42:04 24 4
gpt4 key购买 nike

我有 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 生成它。

最佳答案

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

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

关于javascript - sequelize.js 连续多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37353060/

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