
直接用 kalnoy/nestedset 包,它专为 Laravel 10.x 优化,支持 PHP 8.1+,无需额外适配就能跑通无限级分类逻辑。
安装包与基础配置
在项目根目录执行:
composer require kalnoy/nestedset- 运行发布服务提供者(Laravel 10.x 默认自动发现,但建议显式执行一次):
php artisan vendor:publish --provider="Kalnoy\Nestedset\NestedSetServiceProvider"
数据库迁移添加字段
在创建分类表的迁移文件中,调用 $table->nestedSet() 即可自动添加 _lft、_rgt 和 parent_id 字段:
Schema::create('categories', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->nestedSet(); // ← 关键一行
$table->timestamps();
});
执行迁移:php artisan migrate
模型启用 NestedSet 功能
在对应模型(如 app/Models/Category.php)中引入 trait:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Kalnoy\Nestedset\NodeTrait;
class Category extends Model
{
use NodeTrait;
}
此时模型已支持所有树形操作:插入子节点、移动、获取祖先/后代、重建树等。
快速验证是否生效
在 Tinker 或控制器里试一下:
- 创建根节点:
$root = Category::create(['name' => '电子产品']); - 添加子节点:
$child = $root->children()->create(['name' => '手机']); - 查祖先:
$child->ancestors->pluck('name');→ 返回集合["电子产品"]
只要没报错且结果符合层级关系,说明安装配置已完成。


















