kr0lik / yii2-ltree
Yii2 traits for postgresql ltree module
2.1.0
2020-04-13 14:36 UTC
Requires
- php: >=7.0
- yiisoft/yii2: *
README
yii2的Postgresql ltree traits
安装
推荐通过 composer 安装此扩展。
运行
composer require --prefer-dist kr0lik/yii2-ltree
或添加
"kr0lik/yii2-ltree": "*"
到您的 composer.json
文件的 require 部分。
使用方法
模型中需要 id
字段。
ltree 扩展必须与 schema public
一起安装。您可以通过修改静态属性 Ql::$ltreeSchema
来更改它。
默认情况下,表中的路径字段必须命名为 lpath
。您可以通过修改 traits 中的属性 ltreePathField
来更改它。
将 \kr0lik\ltree\LtreeActiveRecordTrait 添加到您的 ActiveRecord 中
可用方法
/** * Get path of $model */ $model->getLPath(): string /** * Get level of $model * retutn 1 - is root * retutn 0 - cant get level */ $model->getLevel(): int; /** * Check if $model is root(0 level) */ $model->isRoot(): bool; /** * Check if $model is first level(After Root) */ $model->isFirstLevel(): bool; /** * Get childrens of $model * * @param int $level DEFAULT 0 * $level = 0 - get all childs * $level = n - get n level childs */ $model->getChildrens($level): ActiveQuery; /** * Get parents of $model * * @param int $level DEFAULT 0 * $level = 0 - get all parents * $level = n - get n level parents */ $model->getParents($level): ActiveQuery; /** * Get Next categories of $model in $model level */ $model->getNext(): ActiveQuery; /** * Get Previous categories of $model in $model level */ $model->getPrevious(): ActiveQuery; /** * Get categories in $model level * * @return ActiveQuery */ $model->getNearest(): ActiveQuery; /** * Remove $model from db */ $model->delete(): bool; /** * Move/insert $model into $anotherModel to the end * * @param self $anotherModel */ $model->appendTo($anotherModel): void; /** * Move/insert $model into $anotherModel to the start * * @param self $anotherModel */ $model->prependTo($anotherModel): void; /** * Move/insert $model after $anotherModel * * @param self $anotherModel */ $model->after($anotherModel): void; /** * Move/insert $model before $anotherModel * * @param self $anotherModel */ $model->before($anotherModel): void; /** * Save $model as root */ $model->makeRoot(): void
将 \kr0lik\ltree\LtreeQueryTrait 添加到您的 ActiveQuery 中
可用方法
/** * Sort by path * * @param int $sort DEFAULT SORT_ASC */ Model::find()->sorted($sort): ActiveQuery; /** * Get all without root */ Model::find()->notRoot(): ActiveQuery; /** * Get root only */ Model::find()->root(): ActiveQuery; /** * Get models by $path * * @param string $path * @param boolean $recursive DEFAULT true * If $recursive == true then get all models where path field value starts from $path(with all childrens) */ Model::find()->byPath($path, $recursive): ActiveQuery; /** * Get not equal path * * @param string $path */ Model::find()->not($path): ActiveQuery; /** * Get closest models on branch * * @param string $path */ Model::find()->closest($path): ActiveQuery; /** * Join parents * * @param int $level DEFAULT 0 * $level = 0 - get all parents * $level = n - get n levels of parents start from $this level * @param string $joinType DEFAULT 'LEFT JOIN' */ Model::find()>joinParents($level, $joinType): ActiveQuery; /** * Join childrens * * @param int $level DEFAULT 0 * $level = 0 - get all childrens * $level = n - get n levels of childrens start from $this level * @param string $joinType DEFAULT 'LEFT JOIN' */ Model::find()->joinChildrens($level, $joinType): ActiveQuery; /** * Set start level * * @param int $level */ Model::find()->startLevel($level): ActiveQuery; /** * Set end level * * @param int $level */ Model::find()->endLevel($level): ActiveQuery; /** * Set level * * @param int $level */ Model::find()->level($level): ActiveQuery; /** * Get all as tree * * @return array<int, mixed> */ Model::find()->tree(): array;