【问题标题】:Nested inner join in SequelizeSequelize 中的嵌套内连接
【发布时间】:2021-01-02 05:20:57
【问题描述】:

我正在尝试使用 Sequelize 内连接五个表。我知道我必须使用required: true 进行内部连接。但即使在使用 required: true 之后,它也不会生成我想要实现的查询。在这里,我附上了没有required: true 语句的代码。我应该如何放置required: true 语句来内连接五张表?

const db = require('../models');

const data = await db.A.findAll({
    where: conditionA,
    include: [{
        model: db.B,
        where: conditionB,
        include: [
            {
                model: db.C,
                where: conditionC,
                include: [{
                    model: db.D,
                    where: conditionD
                }],
            },
            {
                model: db.E,
                where: conditionE,
            }
        ]
    }]
});

模型关联

db.A.hasMany(db.B);
db.C.hasMany(db.B);
db.E.hasMany(db.B);
db.D.hasMany(db.C);

db.B.belongsTo(db.A);
db.B.belongsTo(db.C);
db.B.belongsTo(db.E);
db.C.belongsTo(db.D);

任何帮助将不胜感激。提前致谢。

【问题讨论】:

  • 显示模型关联
  • 我已经编辑了问题。
  • 您尝试过A 选项中指示的subQuery: false 选项吗?
  • 是的,您应该在include's 中的所有模型选项中注明required: true
  • 我没有尝试过“subQuery: false”。所以我已经按照你说的编辑了代码。我应该试试这个吗?抱歉在这里分享代码。 await db.A.findAll({ where: conditionA, required: true, subQuery: false, include: [{ model: db.B, where: conditionB, required: true, include: [ { model: db.C, where: conditionC, required: true include: [{ model: db.D, where: conditionD, required: true }], }, { model: db.E, where: conditionE, required: true } ] }] });跨度>

标签: node.js sequelize.js


【解决方案1】:

您应该在include 选项中为所有模型指明required: true,并指明subQuery: false 以使Sequelize 使用通常的JOIN 而不是带有子查询的JOIN。

【讨论】:

    猜你喜欢
    • 2019-07-28
    • 1970-01-01
    • 2020-04-23
    • 2016-11-25
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    相关资源
    最近更新 更多