安排如何在单个表中选择孩子的孩子?

时间:2018-11-18 15:09:54

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

我在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与父子关系联系起来

like:食物->甜->糖果,巧克力

我想用sequelize编写查询,该查询将返回父级和所有关联的子级。

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

在单个where对象中可行吗?

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

1 个答案:

答案 0 :(得分:1)

您可以使用: bug 26435

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

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' }
    //      ] }
    //  ] }
    // ]
});

您可以签出该链接,还有更多示例来展示您可以使用此库执行的操作。

  

注意:您也可以在没有插件的情况下执行此操作,但是tit会非常   长距离,这样会更干净。