PHP code example of yii2-extensions / nested-sets-behavior
1. Go to this page and download the library: Download yii2-extensions/nested-sets-behavior library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
yii2-extensions / nested-sets-behavior example snippets
declare(strict_types=1);
use yii\db\ActiveRecord;
use yii2\extensions\nestedsets\NestedSetsBehavior;
/**
* @phpstan-property int $depth
* @phpstan-property int $id
* @phpstan-property int $lft
* @phpstan-property int $rgt
*/
class Category extends ActiveRecord
{
public static function tableName(): string
{
return '{{%category}}';
}
public function behaviors(): array
{
return [
'nestedSets' => [
'class' => NestedSetsBehavior::class,
// 'treeAttribute' => 'tree', // Enable for multiple trees
// 'leftAttribute' => 'lft', // Default: 'lft'
// 'rightAttribute' => 'rgt', // Default: 'rgt'
// 'depthAttribute' => 'depth', // Default: 'depth'
],
];
}
public function transactions(): array
{
return [
self::SCENARIO_DEFAULT => self::OP_ALL,
];
}
}
declare(strict_types=1);
// Create root node
$root = new Category(['name' => 'Electronics']);
$root->makeRoot();
// Add children
$phones = new Category(['name' => 'Mobile Phones']);
$phones->appendTo($root);
$computers = new Category(['name' => 'Computers']);
$computers->appendTo($root);
// Add grandchildren
$smartphone = new Category(['name' => 'Smartphones']);
$smartphone->appendTo($phones);
$laptop = new Category(['name' => 'Laptops']);
$laptop->appendTo($computers);
declare(strict_types=1);
// Get all descendants of a node
$children = $root->children()->all();
// Get only direct children
$directChildren = $root->children(1)->all();
// Get all ancestors of a node
$parents = $smartphone->parents()->all();
// Get all leaf nodes (nodes without children)
$leaves = $root->leaves()->all();
// Navigate siblings
$nextSibling = $phones->next()->one();
$prevSibling = $computers->prev()->one();
declare(strict_types=1);
// Move as last child
$smartphone->appendTo($computers);
// Move as first child
$smartphone->prependTo($phones);
// Move as next sibling
$smartphone->insertAfter($laptop);
// Move as previous sibling
$smartphone->insertBefore($laptop);
// Make node a new root (multiple trees only)
$smartphone->makeRoot();
declare(strict_types=1);
// Delete node only (children become children of parent)
$phones->delete();
// Delete node with all descendants
$phones->deleteWithChildren();
declare(strict_types=1);
use yii\db\ActiveQuery;
use yii2\extensions\nestedsets\NestedSetsQueryBehavior;
/**
* @template T of Category
*
* @extends ActiveQuery<T>
*/
class CategoryQuery extends ActiveQuery
{
public function behaviors(): array
{
return [
'nestedSetsQuery' => NestedSetsQueryBehavior::class,
];
}
}
// In your Category model
/**
* @phpstan-return CategoryQuery<static>
*/
public static function find(): CategoryQuery
{
return new CategoryQuery(static::class);
}
declare(strict_types=1);
// Find all root nodes
$roots = Category::find()->roots()->all();
// Find all leaf nodes
$leaves = Category::find()->leaves()->all();
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.