javascript - 递归包括Sequelize?

标签 javascript mysql orm sequelize.js

我有可以有子类别的类别

当我做 findAll 时,我想包括所有嵌套的,但我不知道深度。

var includeCondition = { 
                         include: [
                            { 
                               model: models.categories,
                               as:'subcategory', nested: true 
                            }]
                       };

models.categories.findAll(includeCondition)
        .then(function (categories) {
            resolve(categories);
        })
        .catch(function (err) {
            reject(err);
        })
});

结果只给我带来了一层嵌套的包含。
[  
   {  
      dataValues:{  

      },
      subcategory:{  
         model:{  
            dataValues:{  

            }
            // no subcategory here            
         }
      }
   }
]

我可以以某种方式使 sequalize 包含那些嵌套的子类别吗?

最佳答案

如果找到这个,解决方案很少
第一个更复杂,但会提供更好的性能:

这个是关于在MySQL中实现分层数据结构
我喜欢这里的指南

http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

一种名为嵌套集模型的模型。

我自己实际实现的第二个解决方案是递归扩展,这个解决方案使用了大量的 mysql 请求,我相信可以改进,但它是一个快速且运行良好的解决方案。事情是像这样用于每个类别功能

var expandSubcategories = function (category) {
    return new promise(function (resolve, reject) {
        category.getSubcategories().then(function (subcategories) {
            //if has subcategories expand recursively inner subcategories
            if (subcategories && subcategories.length > 0) {
                var expandPromises = [];
                _.each(subcategories, function (subcategory) {
                    expandPromises.push(expandSubcategories(subcategory));
                });

                promise.all(expandPromises).then(function (expandedCategories) {
                    category.subcategories = [];

                    _.each(expandedCategories, function (expandedCategory) {
                        category.subcategories.push(expandedCategory);
                    }, this);


                    //return self with expanded inner
                    resolve(category);
                });

            } else {
                //if has no subcategories return self
                resolve(category);
            }
        });
    });
};

所以它遍历类别并递归地扩展它们。

也许这也会对某人有所帮助。

关于javascript - 递归包括Sequelize?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50145478/

相关文章:

javascript - 绑定(bind)事件期间检索到的输入值不正确

php - 从最近插入的数据库条目的特定行获取信息

php - 将此文本导入数据库

django 之间的区别 - 一对一、多对一和多对多

python - 如何使属性比较能够在 SQLAlchemy 中编译为 SQL 表达式?

java - 如何修改hibernate生成的SQL查询?

javascript - 如何基于流动态构建 Javascript 对象

javascript - angular2 : why window. location.href 会导致 Firefox 上的页面刷新,但 href 不会

mysql - MSSQL 到 MySQL 迁移 - UCS-2 代理项对的字符编码问题,如何从 MSSQL 数据库中删除这些问题?

javascript - Jquery 在悬停时 float