通过中间三分之一 table 将两个关联 table 续集

Sequelize two associate tables by an intermediate third table

所以,我终于让关联在我的续集代码中起作用了。或者我是这么想的。

我有 table A 关联到 table B 和 table B 通过外键关联到 table C。我想使用来自 A、B 和 C 的过滤器从 A 获取行。如果 C 在图片之外我会做这样的事情:

 models.A.findOne({
            attributes: ['id', 'col1', 'col2'],
            where: {
                  col1: value1, 
                  col3: value3
            }, 
            include: [{model: models.B, required: true}]
        }).then(function (result) {
            res.send(result);
        }).catch(function(error){
            console.log(error);
            res.send(error);
        });    

请注意,col3 是 table B 中的一个字段。

现在我想做的最好写成:

 models.A.findOne({
            attributes: ['id', 'col1', 'col2'],
            where: {
                  col1: value1, 
                  col3: value3,
                  col5: value5
            }, 
            include: [{model: models.B, required: true}, {model: models.C, required: true}]
        }).then(function (result) {
            res.send(result);
        }).catch(function(error){
            console.log(error);
            res.send(error);
        });   

Col5 是 table C.

的字段

这样做(正确地)给我一个错误:C 没有连接到 A。 我知道 A 连接到 B,B 连接到 C,因为我在模型中定义了这些连接。但我什至无法定义交叉 - table 关联 - 就像 A 和 C 的关联。

首先,我不知道该怎么做,其次,关联可能包含最多 5 个 table 的链。当我说链时,我指的是一系列关联,而不是对同一 table.

的平行关联

sequelize 如何处理这种情况?

好吧,那太可耻了。

我明白了。表示法如下:

 models.A.findOne({
            attributes: ['id', 'col1', 'col2'],
            where: {
                  col1: value1, 
                  col3: value3,
                  col5: value5
            }, 
            include: [{model: models.B, required: true}, include:[{model: models.C, required: true}]]
        }).then(function (result) {
            res.send(result);
        }).catch(function(error){
            console.log(error);
            res.send(error);
        });  

基本上,嵌套关联的写法和sequelize中的一样——nested。

感谢此来源 http://lorenstewart.me/2016/09/12/sequelize-table-associations-joins/ 提供全面而简单的解释。