开发者问题收集

从原始查询中解析模型和关联 hasMany

2020-03-03
672

提前感谢您的帮助。

我有两个模型:菜单和窗口及其关联

db.menus.hasMany(db.windows);
db.windows.belongsTo(db.windows);

我试图进行平面查询,其输出类似于以下内容:

'menu':
{'description':'Menu 1',
     "windows": [
                  {"description": "windows 1"},
                  {"description": "windows 2"},
                  {"description": "windows 3"},      
                ]
}

当我将关联设置为 hasOne 而不是 hasMany 时,至少窗口位于菜单内,但每个窗口都有一行,但使用 hasMany 时,信息将作为 菜单 的一部分包含在内,我想要一个窗口对象。

const options = {
        model: db.menus,
        // mapToModel: true,
        // hasJoin: true,
        include: [{
            model: db.ventanas
        }]
    };
    db.menus._validateIncludedElements(options);
    db.sequelize.query(Query, options)
        .then(MenuWindows => {
            console.log(MenuWindows);
        });

我已经证明了很多说服力,但没有一个能正常工作,我想知道是否有什么我没做的事情,正如我所说,当我将关联设置为 hasOne 时,选项 hasJoin 有效,否则会给我这个错误 未处理的拒绝TypeError:无法读取未定义的属性“模型”

顺便说一句,使用 findAll 后,sequelize 工作正常,但我正在使用更多表进行复杂查询,但仅显示菜单和窗口,因此我推断关联很好,问题出在我映射输出的方式上

2个回答

经过一千次尝试,只需将表的别名放在模型中即可

        model: db.menus,
        as: 'menu',
        hasJoin: true,
        include: [{
            as: 'windows',
            model: db.windows
        }]
    };
    db.menus._validateIncludedElements(options);
    db.sequelize.query(query, options)
        .then(menuWindows => {
            console.log(menuWindows);
        }); ```
Adreso
2020-03-04

你试过这个吗...

return sequelize.query(/* query */, {
    nest: true,
    type: sequelize.QueryTypes.SELECT
});
Greg Belyea
2020-03-04