Laravel 使用 Laravel-nestedset 实现无限分类

安装nestedset

composer require kalnoy/nestedset

数据库迁移具体说明请参考:github.com/lazychaser/laravel-nest...
具体迁移代码:

public function up()
    {
        Schema::create('subjects', function (Blueprint $table) {
            $table->increments('id')->comment('科目ID');
            $table->string('name')->notNULL()->comment('科目名称');
            $table->nestedSet();
            $table->string('intro')->nullable()->comment('科目简介');
        });
    }

迁移后数据库结构,可以看到多了三个字段
laravel使用laravel-nestedset实现无限二级分类

模型 引入需要的文件

use Kalnoy\Nestedset\NodeTrait;

class Foo extends Model {
    use NodeTrait;
}

控制器

<?php

namespace App\Http\Controllers\Admin;

use App\Admin\Subject;
use App\Http\Controllers\Controller;
use App\Http\Requests\SubjectRequest;
use App\Repositories\SubjectRepositories;
use Illuminate\Http\Request;


class SubjectController extends Controller
{
    protected $repo;

    public function __construct(SubjectRepositories $repo)
    {
        $this->repo = $repo;
    }
//用来展示分类的方法index
    public function index()
    {
        $data = Subject::with('children')->withDepth()->get()->toFlatTree();
        return view('admin.subject', compact('data'));
    }
//用来增加分类的方法add
    public function add(SubjectRequest $request)
    {
        return $this->repo->save($request) ? '1' : '0';
    }



}

add方法里面的save代码

public function save($request)
    {
        $data = $request->only(['name', 'parent_id']);
        $subject = Subject::create($data);
        if ($request->parent_id) {
            $node = Subject::find($request->parent_id);
            $node->appendNode($subject);
        }
        return $subject;
    }

视图文件 admin.subject


                                <tbody class="x-cate">
                                @foreach($data as $val)

                                <tr cate-id='{{$val->id}}' fid='{{$val->parent_id ?? '0'}}' >
                                    <td>
                                        <input type="checkbox" name="" lay-skin="primary">
                                    </td>
                                    <td>{{$val->id}}</td>
                                    @if($val->children->isEmpty() and $val->parent_id)
                                    <td>{!! str_repeat("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;",$val->depth) !!}├ {{$val->name}}
                                    </td>@elseif($val->children->isEmpty() and $val->parent_id==0)
                                        <td>{{$val->name}}</td>@else
                                    <td>{!! str_repeat("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;",$val->depth) !!}<i class="layui-icon x-show" status='true'>&#xe623;</i>{{$val->name}}</td>@endif
                                </tr>

                                 @endforeach
                                </tbody>

效果展示

laravel使用laravel-nestedset实现无限二级分类

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 3

不能一开始就用 用来增加分类的方法add吗?

3年前 评论

class Foo extends Model { use NodeTrait; }

这个数据模型的 Foo 是不是错误啊,应该是Subject,这个吧!

public function __construct(SubjectRepositories $repo)

SubjectRepositories 这个在哪创建的?

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!