【问题标题】:sequelize how to select child of childs in a single table?续集如何在单个表中选择孩子的孩子?
【发布时间】:2018-11-18 15:09:54
【问题描述】:

我在 postgresql 数据库中有下表

id | name       |active| parentId
--------------------------------
1  | food       | true | null
2  | soft drink | true | 1
3  | canned food| true | 1
4  | sweet      | true | 1
5  | candy      | true | 4
6  | chocolate  | true | 4
7  | chemical   | true | null

如您所见,它们通过 ID 与父子关系相关联

喜欢:食物 -> 甜食 -> 糖果、巧克力

我想编写一个带有 sequelize 的查询,它将返回父级和所有关联的子级。

假设我选择food,查询应该返回parentId等于id 1的所有行,然后返回parentId等于2,3,4的所有行(食物的孩子),然后返回 parentId 所在的所有行 等于 5,6(甜蜜的孩子)等,只要有孩子。

在单个 where 对象中是否可行?

db.ItemGroup.findAll({
  where: {
    // query
  }
});

【问题讨论】:

    标签: javascript sql node.js postgresql sequelize.js


    【解决方案1】:

    您可以使用:sequelize-hierarchy.js

    在这里你必须像这样定义模型:

    var folder = sequelize.define('folder', {
        name: Sequelize.STRING,
        parentId: {
            type: Sequelize.INTEGER,
            hierarchy: true // <------- HERE
        }
    });
    

    我认为,这就是你要找的:

    folder
    .findAll({ hierarchy: true }) // <------- HERE
    .then(function(results) {
        // results = [
        //  { id: 1, parentId: null, name: 'a', children: [
        //      { id: 2, parentId: 1, name: 'ab', children: [
        //          { id: 3, parentId: 2, name: 'abc' }
        //      ] }
        //  ] }
        // ]
    });
    

    您可以查看链接,还有更多示例可以展示您可以使用此库执行的操作。

    注意:你也可以在没有插件的情况下做到这一点,但山雀会非常 长的方式,这样更干净。

    【讨论】:

    • 谢谢,非常好的解决方案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多