通过中间三分之一 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/ 提供全面而简单的解释。
所以,我终于让关联在我的续集代码中起作用了。或者我是这么想的。
我有 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/ 提供全面而简单的解释。