Skip to content

Query hierarchical data structures in sql with knex

License

Notifications You must be signed in to change notification settings

a179346/knex-tree

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

21 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

knex-tree πŸ‘‹

Documentation Documentation Documentation Maintenance License: MIT

Query hierarchical data structures in sql with knex

πŸ”— Link

πŸ“₯ Install

npm install knex-tree

πŸ“– Usage

  • Example data

id parentId desc
1 null I am 1
2 1 I am 2
3 1 I am 3
a 2 I am a
b 2 I am b
  • KnexTree

KnexTree.Constructor() => KnexTree
const { KnexTree } = require('knex-tree');
const knex = require('knex');

const tree = new KnexTree({
  db: knex({ ... }),
  table: 'mytree',
  idColumn: 'id',
  parentIdColumn: 'parentId',
});
KnexTree.node(id) => KnexNode
const node = tree.node(5);
KnexTree.getAllData() => Promise<Model[]>
const data = await tree.getAllData();
  • KnexNode

KnexNode.id => id
const id = node.id;
KnexNode.isExist() => Promise<boolean>
const isExist = await node.isExist();
KnexNode.getData() => Promise<Model | null>
// data is null if the id doesn't exist in the table
const data = await node.getData();
KnexNode.getParentData() => Promise<Model | null>
// data is null if parent dosen't exist in the table
const data = await node.getParentData();
KnexNode.getChildrenData(where?) => Promise<Model[]>
const data = await node.getChildrenData();
KnexNode.isRoot() => Promise<boolean>
// return true if node is root
const data = await node.isRoot();
KnexNode.getPath() => Promise<(Model & ITreeLv)[] | null>
// return the path from root to this node
const data = await node.getPath();
KnexNode.hasChild(id) => Promise<Model | null>
// data is null if there is no data which match "id = 7" & "parentId = this.id"
const data = await node.hasChild(7);
KnexNode.hasParent(id) => Promise<Model | null>
// data is null if there is no data which match "id = 7" & "hasChild(this.id)"
const data = await node.hasParent(7);
KnexNode.hasAncestor(id, maxLevel?) => Promise<(Model & ITreeLv) | null>
// data is null if this is no ancestor whose id = 7
const data = await node.hasAncestor(7);
KnexNode.hasDescendant(id, maxLevel?) => Promise<(Model & ITreeLv) | null>
// data is null if this is no descendant whose id = 7
const data = await node.hasDescendant(7);
KnexNode.getPathUpTo(id, maxLevel?) => Promise<(Model & ITreeLv)[] | null>
// data is null if this is no ancestor whose id = 7
// return the path from this node to the ancestor(id = 7)
const data = await node.getPathUpTo(7);
KnexNode.getPathDownTo(id, maxLevel?) => Promise<(Model & ITreeLv)[] | null>
// data is null if this is no descendant whose id = 7
// return the path from this node to the descendant(id = 7)
const data = await node.getPathDownTo(7);
KnexNode.getDescendants(maxLevel?, where?, limit?, offset?) => Promise<(Model & ITreeLv)[]>
// return all descendants
let data = await node.getDescendants();

// return all descendants whose TreeLv <= 2
data = await node.getDescendants(2);

πŸ™‹β€β™‚οΈ Author

🀝 Contributing

Contributions, issues and feature requests are welcome!
Feel free to check issues page.

🌟 Show your support

Give a ⭐️ if this project helped you!

πŸ“ License

Copyright Β© 2021 a179346.
This project is MIT licensed.


This README was generated with ❀️ by readme-md-generator