matperez/yii2-materialized-path
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
matperez/yii2-materialized-path 适用场景与选型建议
matperez/yii2-materialized-path 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 3k 次下载、GitHub Stars 达 5, 最近一次更新时间为 2015 年 04 月 02 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「materialized path」 「yii2」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 matperez/yii2-materialized-path 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 matperez/yii2-materialized-path 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 matperez/yii2-materialized-path 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
A custom URL rule class for Yii 2 which allows to create translated URL rules
Materialized Path Behavior for Yii2
Flattens a multi-dimensional array or any \Traversable into a one-dimensional array. Elevates an one-dimensional or any \Traversable to a multi-dimensional array.
JSONPath implementation for querying and updating JSON objects with support for json flattening into a table
PHP abstraction level for Materialized database
The InstantConfigurationCopy module provides easy way to copy configuration field information for admin in back office Magento 2.
统计信息
- 总下载量: 3k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 5
- 点击次数: 17
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: BSD-3-Clause
- 更新时间: 2015-04-02