我在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
}
});
答案 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会非常 长距离,这样会更干净。