ghopper / nested_set

一个小巧的类,提供对“嵌套集合”数据库树的基本操作功能。

v0.3.6 2017-02-26 10:23 UTC

This package is not auto-updated.

Last update: 2024-09-28 20:09:17 UTC


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并将后代上移一级

要求

  • 数据库必须支持事务
  • 数据库必须支持锁