Download the PHP package efureev/laravel-trees without Composer

On this page you can find all versions of the php package efureev/laravel-trees. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package laravel-trees

PHP Laravel Package Total Downloads License composer.lock available

Latest Stable Version

Maintainability Test Coverage

Contents:

Information

This package is Multi-Tree structures (a lot of root-nodes).

What are nested sets?

Nested sets or Nested Set Model is a way to effectively store hierarchical data in a relational table. From wikipedia:

The nested set model is to number the nodes according to a tree traversal, which visits each node twice, assigning numbers in the order of visiting, and at both visits. This leaves two numbers for each node, which are stored as two attributes. Querying becomes inexpensive: hierarchy membership can be tested by comparing these numbers. Updating requires renumbering and is therefore expensive.

Applications

NSM shows good performance when tree is updated rarely. It is tuned to be fast for getting related nodes. It'is ideally suited for building multi-depth menu or categories for shop.

Requirements

It is highly suggested to use database that supports transactions (like MySql's InnoDb, Postgres) to secure a tree from possible corruption.

Installation

To install the package, in terminal:

Testing

or

Documentation

This package works with different model primary key: int, uuid. This package allows to creating multi-root structures: no only-one-root! And allow to move nodes between trees.

Migrating

Model for Single tree structure:

or with custom base config

or with custom config

Model for Multi tree structure and with primary key type uuid:

Use in migrations:

Relationships

Node has following relationships that are fully functional and can be eagerly loaded:

Creating nodes

Creating root-nodes

When you creating a root-node: If you use ...

These actions are identical:

Creating non-root-nodes

When you creating a non-root node, it will be appended to the end of the parent node.

If you want to make node a child of other node, you can make it last or first child.

In following examples, $parent is some existing node.

Appending to the specified parent

Add child-node into node. Insert after other children of the parent.

Prepending to the specified parent

Add child-node into node. Insert before other children of the parent.

Insert before parent node

Add child-node into same parent node. Insert before target node.

Insert after parent node

Add child-node into same parent node. Insert after target node.

Moving nodes

Move node up in self parent scope
Move node down in self parent scope

Deleting nodes

To delete a node:

IMPORTANT! if deleting node has children - they will be attach to deleted node parent. This behavior may be changed.

IMPORTANT! Nodes are required to be deleted as models! DO NOT try do delete them using a query like so:

This will break the tree!

SoftDeletes trait is supported, also on model level.

Also you may to delete all children:

Retrieving nodes

In some cases we will use an $id variable which is an id of the target node.

Ancestors and descendants

Ancestors make a chain of parents to the node. Helpful for displaying breadcrumbs to the current category.

Descendants are all nodes in a sub tree, i.e. children of node, children of children, etc.

Both ancestors and descendants can be eagerly loaded.

It's relationships:

Parent

Get parent node

Collection of parents

Siblings

Siblings are nodes that have same parent.

Nodes queries

Method Example Description
parents(int $level = null) $node->parents(2)->get(); Select chain of parents
root() $node->root()->get(); Select only root nodes
notRoot() $node->notRoot()->get(); Select only not root nodes
siblings() $node->siblings()->get();
siblingsAndSelf() $node->siblingsAndSelf()->get();
prev() $node->prev()->first();
next() $node->next()->first();
prevSiblings() $node->prevSiblings()->get();
nextSiblings() $node->nextSiblings()->get();
prevSibling() $node->prevSibling()->first();
nextSibling() $node->nextSibling()->first();
prevNodes() $node->prevNodes()->get();
nextNodes() $node->nextNodes()->get();
leaf() $node->leaf()->first(); Select ended node
leaves(int $level = null) $node->leaves(2)->first();
descendants($level, $andSelf, $backOrder) $node->descendants(2, true)->get(); Get all descendants
whereDescendantOf($id) $node->whereDescendantOf(2)->get(); Get all descendants
whereNodeBetween([$left, $right]...) $node->whereDescendantOf(2)->get(); Add node selection statement between specified range.
defaultOrder($dir) $node->defaultOrder(true)->get(); Add node selection statement between specified range.
byTree($dir) $node->byTree(1)->get(); Select nodes by tree_id.

Model's helpers

Method Return Example
isRoot() bool $node->isRoot();
isChildOf(Model $node) bool $node->isChildOf($parentNode);
isLeaf() bool $node->isLeaf();
equalTo(Model $node) bool $node->equalTo($parentNode);

Console Tree

Checking consistency

You can check whether a tree is broken (i.e. has some structural errors):

It is possible to get error statistics:

It will return an array with following keys:

Fixing tree

Since v3.3.1 tree can now be fixed.

For single tree:

For multi tree:


All versions of laravel-trees with dependencies

PHP Build Version
Package Version
Requires php Version ^8.2|^8.3
illuminate/database Version ^11.0
illuminate/events Version ^11.0
efureev/support Version ^4.27
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package efureev/laravel-trees contains the following files

Loading the files please wait ....