dev-master
9999999-dev https://github.com/Kappa-org/DoctrineMPTTModified Pre-order Tree Traversal doctrine implementation
BSD-3-Clause
The Requires
The Development Requires
doctrine tree mptt traversal modified pre-order tree traversal
Wallogit.com
2017 © Pedro PelĂĄez
Modified Pre-order Tree Traversal doctrine implementation
Modified Pre-order Tree Traversal doctrine implementation., (*2)
http://www.sitepoint.com/series/storing-hierarchical-data-in-a-database/, (*3)
Full list of dependencies you can get from Composer config file, (*4)
The best way to install Kappa\DoctrineMPTT is using Composer, (*5)
$ composer require kappa/doctrine-mptt:@dev
and register extension, (*6)
extensions:
doctrine: Kappa\Doctrine\DI\DoctrineExtension
doctrineMPTT: Kappa\DoctrineMPTT\DI\DoctrineMPTTExtension
DELETE, 2x UPDATE), for
create is needed 3 queries (1x INSERT, 2x UPDATE) and for move item is needed only 1x UPDATE
query. This algorithm is much faster and more fuel efficient than other commonly used methods, such as
classical parent - children method.moveItem() or insertItem() you should refresh loaded entities. Attention! you must save all
updates before call this methods to avoids conflicts
You can set custom names for used columns:, (*7)
doctrineMPTT:
entityClass: Your\entity
originalLeftName: _lft
leftColumnName: lft
rightColumnName: rgt
depthColumnName: depth
Configuration may not be in config file but can be set Kappa\DoctrineMPTT\TraversableManager::setConfigurator., (*8)
Package provide main Kappa\DoctrineMPTT\TraversableManager which can be used for all manipulations.
All operations are performed over entity which is instance of Kappa\DoctrineMPTT\Entities\TraversableInterface., (*9)
You can use own entity but, your entity must implement Kappa\DoctrineMPTT\Entities\TraversableInterface interface.
For easier implementation you can use Kappa\DoctrineMPTT\Entities\Traversable trait which implements all
requires methods and columns., (*10)
Original tree structure, (*11)
, (*12)
Kappa\DoctrineMPTT\TraversableManager provides three methods by which we can do all operations., (*13)
insertItem(TraversableInterface $actual, TraversableInterface $parent = null, $refresh), (*14)
Second argument is new parent and actual item (first argument) will be included under this parent item.
Last argument is bool and if is set to true entities will be refreshed. For example: This code generate
next tree, (*15)
$parent = $this->repository->find(4); $actual = new TraversableEntity(); // .... $this->traversableManager->insertItem($parent, $actual);
, (*16)
If is parent null, actual item will be inserted as last child of root element if it exist. If not exist root element actual item will be inserted as root., (*17)
moveItem(TraversableInterface $actual, TraversableInterface $related, action, refresh), (*18)
With this method you can move each item into new place (as predecessor or descendant).
Last argument is bool and if is set to true entities will be refreshed.
For example predecessor, (*19)
// (1) $actual = $this->repository->find(3); $related = $this->repository->find(2); $this->traversableManager->moveItem($actual, $related, TraversableManager::PREDECESSOR); // (1) - move actual before related // (2) $actual = $this->repository->find(3); $related = $this->repository->find(4); $this->traversableManager->moveItem($actual, $related, TraversableManager::DESCENDANT); // (2) - move actual as child of related // (3) $actual = $this->repository->find(3); $this->traversableManager->moveItem($actual, null, TraversableManager::DESCENDANT); // (3) - move actual as last child of root
(1) Result, (*20)
, (*21)
(2) Result, (*22)
, (*23)
(3) Result, (*24)
, (*25)
removeItem(TraversableInterface $actual), (*26)
Remove item and all its children For example:, (*27)
$actual = $this->repository->find(2); $this->traversableManager->removeItem($actual);
, (*28)
Kappa\DoctrineMPTT\Queries\Objects\Selectors\GetAll - returns all items sorted for scalable listingKappa\DoctrineMPTT\Queries\Objects\Selectors\GetParents - returns all parents for actual itemKappa\DoctrineMPTT\Queries\Objects\Selectors\GetChildren - returns all children for actual itemKappa\DoctrineMPTT\Queries\Objects\Selectors\GetPrevious - return previous itemKappa\DoctrineMPTT\Queries\Objects\Selectors\GetNext - return next itemKappa\DoctrineMPTT\Queries\Objects\Selectors\GetParent - returns parent itemKappa\DoctrineMPTT\Queries\Objects\Selectors\GetRoot - returns tree rootYou can use Kappa\DoctrineMPTT\Queries\SelectorsCollector as easier getter of query objects, (*29)
Modified Pre-order Tree Traversal doctrine implementation
BSD-3-Clause
doctrine tree mptt traversal modified pre-order tree traversal