kr0lik/yii2-ltree

Yii2 traits for postgresql ltree module

安装量: 1,360

依赖: 0

建议者: 0

安全: 0

星标: 1

关注者: 1

分支: 0

开放性问题: 0

类型:yii2-extension

2.1.0 2020-04-13 14:36 UTC

This package is auto-updated.

Last update: 2024-08-29 04:48:44 UTC


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;