Package Data | |
---|---|
Maintainer Username: | langaner |
Maintainer Contact: | krashgt@gmail.com (Langaner) |
Package Create Date: | 2016-06-03 |
Package Last Update: | 2017-09-16 |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-11-14 15:13:49 |
Package Statistics | |
---|---|
Total Downloads: | 3,086 |
Monthly Downloads: | 0 |
Daily Downloads: | 0 |
Total Stars: | 5 |
Total Watchers: | 3 |
Total Forks: | 7 |
Total Open Issues: | 1 |
langaner/materialized-path
to composer.json
."langaner/materialized-path": "dev-master"
2)Run composer update
to pull down the latest version of the package.
3)Now open up app/config/app.php and add the service provider to your providers array.
Langaner\MaterializedPath\MaterializedPathServiceProvider::class,
4)Add the trait to model what need tree implementation
use \Langaner\MaterializedPath\MaterializedPathTrait;
Table migration example page_table
:
Schema::create('page_table', function(Blueprint $table)
{
$table->engine = 'InnoDB';
$table->increments('id');
// parent id
$table->integer('parent_id')->unsigned()->nullable();
// depth path consisting of models id
$table->string('path');
// depth path consisting of models alias
$table->string('real_path')->unique();
// alias field
$table->string('alias')->unique();
// order position
$table->integer('position')->default(0)->index();
// depth level
$table->integer('level')->default(0)->index();
$table->foreign('parent_id')->references('id')->on('page_table')->onDelete('cascade');
});
// Make model is root
with(new Page())->makeRoot();
// Make model first children by parent id
with(new Page())->makeFirstChildOf($parentId);
// Make model last children by parent id
with(new Page())->makeLastChildOf($parentId);
// Make previous sibling
$page = Page::find(2);
$page->makePreviousSiblingOf(Page::find(1));
// Make next sibling
$page = Page::find(2);
$page->makeNextSiblingOf(Page::find(1));
// Update model data
$page = Page::find(1);
$page->position = 2;
with(new Page())->updateNode($page);
// Get parent
Page::find(1)->parent()->get();
// Get sibling
Page::find(1)->sibling()->get();
// Get childrens by depth
Page::find(1)->childrenByDepth()->get();
// Get parents by depth
Page::find(1)->parentByDepth()->get();
// Descendant check
Page::find(1)->isDescendantOf(Page::find(2));
// Ancestor check
Page::find(1)->isAncestorOf(Page::find(2));
// Is leaf
Page::find(1)->isLeaf();
// All leafs of model
Page::allLeaf();
// All roots of model
Page::allRoot();
// Get exploded path
Page::find(1)->getExplodedPath();
// Build real path by entities
with(new Page())->buildRealPath($ids);
// Build model tree
Page::find(1)->buildTree();
// Build model tree by parent id
Page::find(1)->buildChidrenTree();
Publish assets php artisan vendor:publish
This command initialize config file, located under app/config/packages/langaner/materialized-path/materialized_path.php.
Set with_translations
to true
if you need translation in result model. This option required translation pack https://github.com/dimsav/laravel-translatable