malith124 / materialized-path
Materialized path trait for Laravel 10
1.0.8
2024-09-13 15:20 UTC
Requires
- php: ^8.0
- illuminate/support: ^10.0
This package is auto-updated.
Last update: 2024-12-13 15:51:02 UTC
README
Installation
- Add
langaner/materialized-path
tocomposer.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;
Migrations
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'); });
Available methods
// 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();
Configuration
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