Javascript 续集如何在单个表中选择child的子级?

Javascript 续集如何在单个表中选择child的子级?,javascript,sql,node.js,postgresql,sequelize.js,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 |

我在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
  }
});
您可以使用:

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

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

层次结构:真的//谢谢,真的很好的解决方案!
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' }
    //      ] }
    //  ] }
    // ]
});