Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message
Laravel Nestedset

Laravel Nestedset Laravel Package

vusys/laravel-nestedset

A modern Laravel nested-set implementation for hierarchical Eloquent data, featuring strict types, PHPStan level 9, atomic CASE-WHEN mutations, multi-tree scoping, and soft deletes. Supports PHP 8.3 and Laravel 11, 12, or 13.

View on GitHub
Deep Wiki
Context7

Nested set model implementation for Laravel 11+.

Frequently asked questions about Laravel Nestedset
How do I install vusys/laravel-nestedset in a Laravel 11+ project?
Run `composer require vusys/laravel-nestedset` and publish the migration with `php artisan vendor:publish --tag=nestedset-migrations`. Then, add the `NestedSet` trait to your Eloquent model and run the migration. Ensure your PHP version is 8.1+ for full compatibility.
Does this package support deep hierarchies (e.g., 15+ levels)?
Yes, but performance depends on database indexing. For deep trees, ensure `lft`/`rgt` columns are indexed. Test with your expected depth using the package’s query methods like `getDescendants()` to validate traversal speed. Consider Closure Tables if queries degrade significantly.
Can I use this for multi-tree hierarchies (e.g., separate category trees per tenant)?
Yes, the package supports multi-tree scoping via the `setTreeColumn()` method. Define a column (e.g., `tree_id`) to isolate hierarchies. This is useful for multi-tenant or segmented applications where trees shouldn’t intersect.
How does it handle concurrent writes (e.g., two users reordering nodes simultaneously)?
The package doesn’t include built-in locking, so race conditions can occur during writes. For high-concurrency scenarios, implement database-level locks (e.g., `SELECT ... FOR UPDATE`) or queue delayed tree rebuilds using Laravel’s queues to serialize mutations.
What’s the difference between Materialized Path and Adjacency List in this package?
Materialized Path stores the full path (e.g., `1/4/7`) in a single column, while Adjacency List uses `parent_id`. This package defaults to Materialized Path (via `lft`/`rgt` columns) for faster reads, but you can configure it for Adjacency List if your queries favor parent-child relationships.
Will this work with Laravel Scout for hierarchical search (e.g., autocomplete)?
Yes, integrate Scout with the package by indexing hierarchical data (e.g., `name`, `path`). Use `whereHasParent()` or `getDescendants()` in Scout’s `toSearchableArray()` to ensure search results respect the tree structure. Example: `$model->searchable(['name', 'path'])->scopes(['tree' => $treeId]).`
How do I migrate an existing database to use nested sets without downtime?
Use the package’s `NestedSet` trait to rebuild trees incrementally. For large datasets, chunk processing: loop through nodes, update `lft`/`rgt` in batches, and verify with `isValidTree()`. Example: `php artisan tinker` to manually test before full migration. Backup your data first.
Are there performance benchmarks for large datasets (e.g., 50K+ nodes)?
Benchmarks via Bencher show optimized traversal for read-heavy workloads. For 50K+ nodes, ensure `lft`/`rgt` columns are indexed and test with `getDescendants()` or `whereHasParent()`. Write-heavy workloads may need event-based updates (e.g., queue tree rebuilds) to avoid locking issues.
Can I use this with Laravel Nova for a tree-based UI?
Yes, pair this package with frontend libraries like `vue-nested-tree` or Nova toolkits. Expose hierarchical data via API (e.g., `getDescendants()`) and use Nova’s custom fields to render interactive trees. Example: `$model->with(['children' => function($query) { $query->orderBy('lft'); }])->get().`
What alternatives should I consider if this package doesn’t fit my needs?
For complex queries, evaluate Closure Tables (e.g., `spatie/laravel-closure-tables`) or recursive Common Table Expressions (CTEs) in raw SQL. If you need async support, check `kalnoy/nestedset` (older but battle-tested). For graph-like hierarchies, consider Neo4j or Laravel’s `hasManyThrough` with depth limits.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle
adachsoft/api-version-bundle
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
cgv/localized-resource