【问题标题】:how to have multiple associations/conditions/includes in node.js sequelize on findAll如何在node.js中拥有多个关联/条件/包含在findAll上的续集
【发布时间】:2015-01-06 18:17:10
【问题描述】:

我有一个 mysql 数据库,我正在通过 node.js 中的 sequelize 访问它。

我想加入 3 张桌子。

关系是:

Person n : n Work (associated through PersonWork having foreign key for Person and Work)
Work n : n Book (associated through BookWork having foreign key for Book and Work)

我想让 Person、Work 和 Book 加入。

现在我在节点中嵌套了 2 个查询,但结果似乎很慢。

SQLPersonWork.findAll({ where: {}, include: [SQLWork, SQLPerson] }).success(function (sqlresult) {
    sqlresult.forEach(function ProcessPersonWorkResult(oneresult) {
        var work = oneresult.work;
        var name = oneresult.person.name;
        (function (work, name) {
            SQLBookWork.findAll({ where: { "work_id": work.id }, include: [SQLBook] }).success(function (sqlbookresult) {
                sqlbookresult.forEach(function ProcessBookResult(onebook) {
                    // process result I want to get
                });
            });
        })(work, name);
    });

可以看到双重嵌套的 findAll()。

有没有办法将其组合成 1 个查询?

【问题讨论】:

    标签: javascript mysql node.js select sequelize.js


    【解决方案1】:

    我不知道这是否是唯一的答案..

    根据NodeJS Sequelize and FindAll with Include and constraintsnode.js sequelize associations, include on condition,如果不直接使用 sql,这似乎是不可能的——尽管这似乎违背了续集的目的。

    var qstring = "SELECT * FROM mydb.person p \
        join mydb.personrole pr on p.id = pr.person_id \
        join mydb.work w on w.id = pr.work_id \
        join mydb.bookwork bw on bw.work_id = w.id \
        join mydb.book b on b.id = bw.book_id;";
    sequelize.query(qstring).success(function (result) {
        console.log(result.count);
        result.forEach(function ProcessRatingResult(oneresult) {
            console.log(oneresult);
        });
    });
    

    它的运行速度也相当快。

    【讨论】:

      猜你喜欢
      • 2013-05-27
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 2018-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多