ghopper / nested_set
一个小巧的类,提供对“嵌套集合”数据库树的基本操作功能。
v0.3.6
2017-02-26 10:23 UTC
Requires (Dev)
- phpunit/dbunit: ^3.0
- phpunit/phpunit: ^6.0
README
一个小巧的类,提供对“嵌套集合”数据库树的操作功能。
准备中
创建数据库表
DROP TABLE IF EXISTS ns_tree;
CREATE TABLE ns_tree (
id INT AUTO_INCREMENT PRIMARY KEY,
lft INT NOT NULL,
rgt INT NOT NULL,
-- you can add whatever you want with text type
-- such as 'name','description','link' etc
name VARCHAR(255),
link VARCHAR(255)
);
INSERT INTO ns_tree (lft,rgt,name,link) VALUES(1,2,'root','root_link');
配置PDO连接。如果尚未设置,则类将PDO属性PDO::ATTR_ERRMODE设置为PDO::ERRMODE_EXCEPTION
...
$pdo = new \PDO(DB_CONN_STRING, DB_USER, DB_PASS,
array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
);
配置
$aConfig = array(
'tb_name' => 'ns_tree',
'tb_field_index'=> 'id',
'tb_field_left' => 'lft',
'tb_field_right' => 'rgt',
'tb_extra_fields'=> array(
'name',
'link'
)
);
使用方法
创建对象
$ns = new CNestedSet($pdo, $aConfig);
添加新节点
传递包含额外字段值的数组
$aNewNode = array(
'name' => 'new node name',
'link' => 'new node link'
);
$nd1 = $ns->addChild(1, $aNewNode);
打印树
返回包含'depth'值的数组。
print_r($ns->getTree($nd1), TRUE);
查看“示例”文件夹以获取更多信息。
可用方法
- getTree($parent_id) - 返回$parent_id节点的所有后代
- addChild($parent_id, $values) - 向$parent_id添加包含$values的新节点
- addRootChild($values) - 向根元素添加新节点
- moveTree($cur_parent_id, $new_parent_id) - 将整个树移动到新的父节点
- deleteTree($node_id) - 删除$node_id及其所有后代
- deleteNode($node_id) - 仅删除$node_id并将后代上移一级
要求
- 数据库必须支持事务
- 数据库必须支持锁