matperez/yii2-materialized-path
最新稳定版本:1.0.2
Composer 安装命令:
composer require matperez/yii2-materialized-path
包简介
The materialized path behavior for the Yii framework
README 文档
README
Materialized Path Tree trait for Yii2 ActiveRecord.
Installation
The preferred way to install this extension is through composer.
Either run
$ composer require matperez/yii2-materialized-path
or add
"matperez/yii2-materialized-path": "*"
to the require section of your composer.json file.
Migrations
Run the following command
$ yii migrate/create create_tree_table
Open the /path/to/migrations/m_xxxxxx_xxxxxx_create_tree_table.php file,
inside the up() method add the following
$this->createTable('tree', [ 'id' => Schema::TYPE_PK, 'name' => Schema::TYPE_STRING.' NOT NULL', 'path' => Schema::TYPE_STRING.' NOT NULL DEFAULT \'.\'', 'position' => Schema::TYPE_INTEGER.' NOT NULL DEFAULT 0', 'level' => Schema::TYPE_INTEGER.' NOT NULL DEFAULT 0', ]);
Configuring
Configure model as follow:
use matperez\mp\MaterializedPathBehavior; use matperez\mp\MaterializedPathQuery; class Tree extends \yii\db\ActiveRecord { /** * @inheritdoc */ public function behaviors() { return [ [ 'class' => MaterializedPathBehavior::className(), ], ]; } /** * @inheritdoc */ public function rules() { return [ [['position', 'level'], 'integer'], [['path'], 'string', 'max' => 255] ]; } /** * Query factory * @return MaterializedPathQuery */ public static function find() { return new MaterializedPathQuery(get_called_class()); } }
Usage
Making a root node
To make a root node
$root = new Tree(['name' => 'root']); $root->makeRoot();
The tree will look like this
- root
Appending a node as the child of another node
To prepend a node as the first child of another node
$child = new Tree(['name' => 'child']); $child->appendTo($root);
The tree will look like this
- root
- child
Move node up and down among siblings
$node = Tree::findOne(['name' => 'child']); // move node up $node->setPosition($node->position - 1); // move node down $node->setPosition($node->position + 1);
Getting the root nodes
To get all the root nodes
$roots = Tree::find()->roots()->all();
Getting children of a node
To get all the children of a node
$root = Tree::find()->roots()->one(); foreach($root->children as $child) { foreach($child->children as $subchild) { // do the things with a subchild } }
Getting parents of a node
To get all the parents of a node
$node = Tree::findOne(['name' => 'child']); $parents = Tree::find()->andWhere(['id' => $node->parentIds])->all();
To get the first parent of a node
$node = Tree::findOne(['name' => 'child']); $parent = $node->parent();
Delete node with children
To delete node with children
$node->delete();
Testing
./vendor/bin/codeception build
./vendor/bin/codeception run unit
Todo
more tests, mode examples
统计信息
- 总下载量: 3k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 5
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: BSD-3-Clause
- 更新时间: 2015-04-02