laravel8 无限级分类

21 篇文章 1 订阅

新建一个Base模型

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use phpDocumentor\Reflection\Types\String_;

class Base extends Model
{
    use HasFactory;
    //软删除
    use SoftDeletes;
    protected $dates=['deleted_at'];
    //设置添加时的黑名单
    protected $guarded=[];

    public function setRouteNameAttribute($value){
        $this->attributes['route_name']=empty($value)?'':$value;
    }


    public function treeLevel(array $data, $pid = 0,$html='--', $level=0){
        static $arr=[];
        foreach ($data as $val){
            if($pid == $val['pid']){
                //重复一个字符多少次
                $val['html']=str_repeat($html,$level *2);
                $val['level']=$level+1;
                $arr[]=$val;
                $this->treeLevel($data,$val['id'],$html,$val['level']);
            }
        }
        return $arr;
    }

}

Model模型继承Base

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Fangattr extends Base
{
    use HasFactory;
    //获取数据
    public function getList(){
        //获取全部的数据
        $data=self::get()->toArray();
        //调用父类中的递归层级函数
        return $this->treeLevel($data);
    }

//    获取器
    public function getIconAttribute(){
        return config('url.domain').$this->attributes['icon'];
    }
}

控制器实例化模型

    public function index()
    {
        //实例化
        $model=new Fangattr();
        //取数据
        $data=$model->getList();
        //指定视图并赋值
        return view('admin.fangattr.index',compact('data'));
    }

 view视图 index

@extends('admin.common.main')


@section('cnt')
    <nav class="breadcrumb">
        <i class="Hui-iconfont">&#xe67f;</i> 首页
        <span class="c-gray en">&gt;</span> 房源属性管理
        <span class="c-gray en">&gt;</span> 房源属性列表
        <a class="btn btn-success radius r" style="line-height:1.6em;margin-top:3px" href="javascript:location.replace(location.href);" title="刷新"><i class="Hui-iconfont">&#xe68f;</i></a>
    </nav>
    {{-- 消息提示 --}}
    @include('admin.common.msg')

    <div class="page-container">
        <form method="get" class="text-c"> 输入想要搜索的权限名称:
            <input type="text" class="input-text" style="width:250px" placeholder="节点" value="{{ request()->get('name') }}" name="name" autocomplete="off">
            <button type="submit" class="btn btn-success radius"><i class="Hui-iconfont">&#xe665;</i> 搜节点</button>
        </form>
        <div class="cl pd-5 bg-1 bk-gray mt-20">
        <span class="l">
              <a onclick="layer_show('添加房源属性','{{route('Fangattr.create')}}')" class="btn btn-primary radius">
                <i class="Hui-iconfont" >&#xe600;</i> 添加房源属性
            </a>

        </span>
        </div>
        <div class="mt-20">
            <table class="table table-border table-bordered table-hover table-bg table-sort">
                <thead>
                <tr class="text-c">
                    <th width="80">ID</th>
                    <th width="100">房源属性名称</th>
                    <th width="100">图标</th>
                    <th width="100">字段名称</th>
                    <th width="130">加入时间</th>
                    <th width="100">操作</th>
                </tr>
                </thead>
                <tbody>
                @foreach($data as $item)
                    <tr class="text-c">
                        <td>{{ $item['id'] }}</td>
                        <td class="text-l">
                            {{ $item['html'] }}
                            {{ $item['name'] }}
                        </td>
                        <td><img src="{{ $item['icon'] }}" style="width: 50px;"/></td>
                        <td>{{ $item['field_name'] }}</td>
                        <td>{{ $item['created_at'] }}</td>
                        <td class="td-manage">

{{--                            <a href="{{ route('admin.fangattr.edit',['id'=>$item['id']]) }}" class="label label-secondary radius">修改</a>--}}
{{--                            <a data-href="{{ route('admin.fangattr.destroy',['id'=>$item['id']]) }}" class="delbtn label label-warning radius">删除</a>--}}
                        </td>
                    </tr>
                @endforeach
                </tbody>
            </table>
        </div>
    </div>
@endsection
@section('js')
    <!--请在下方写此页面业务相关的脚本-->
    <script type="text/javascript" src="/admin/lib/My97DatePicker/4.8/WdatePicker.js"></script>
    <script type="text/javascript" src="/admin/lib/datatables/1.10.0/jquery.dataTables.min.js"></script>
    <script type="text/javascript" src="/admin/lib/laypage/1.2/laypage.js"></script>

    </script>
@endsection

view添加视图 create

@extends('admin.common.main')


@section('cnt')
    <nav class="breadcrumb">
        <i class="Hui-iconfont">&#xe67f;</i> 首页
        <span class="c-gray en">&gt;</span> 房源属性管理
        <span class="c-gray en">&gt;</span> 房源属性列表
        <a class="btn btn-success radius r" style="line-height:1.6em;margin-top:3px" href="javascript:location.replace(location.href);" title="刷新"><i class="Hui-iconfont">&#xe68f;</i></a>
    </nav>
    {{-- 消息提示 --}}
    @include('admin.common.msg')

    <div class="page-container">
        <form method="get" class="text-c"> 输入想要搜索的权限名称:
            <input type="text" class="input-text" style="width:250px" placeholder="节点" value="{{ request()->get('name') }}" name="name" autocomplete="off">
            <button type="submit" class="btn btn-success radius"><i class="Hui-iconfont">&#xe665;</i> 搜节点</button>
        </form>
        <div class="cl pd-5 bg-1 bk-gray mt-20">
        <span class="l">
              <a onclick="layer_show('添加房源属性','{{route('Fangattr.create')}}')" class="btn btn-primary radius">
                <i class="Hui-iconfont" >&#xe600;</i> 添加房源属性
            </a>

        </span>
        </div>
        <div class="mt-20">
            <table class="table table-border table-bordered table-hover table-bg table-sort">
                <thead>
                <tr class="text-c">
                    <th width="80">ID</th>
                    <th width="100">房源属性名称</th>
                    <th width="100">图标</th>
                    <th width="100">字段名称</th>
                    <th width="130">加入时间</th>
                    <th width="100">操作</th>
                </tr>
                </thead>
                <tbody>
                @foreach($data as $item)
                    <tr class="text-c">
                        <td>{{ $item['id'] }}</td>
                        <td class="text-l">
                            {{ $item['html'] }}
                            {{ $item['name'] }}
                        </td>
                        <td><img src="{{ $item['icon'] }}" style="width: 50px;"/></td>
                        <td>{{ $item['field_name'] }}</td>
                        <td>{{ $item['created_at'] }}</td>
                        <td class="td-manage">

{{--                            <a href="{{ route('admin.fangattr.edit',['id'=>$item['id']]) }}" class="label label-secondary radius">修改</a>--}}
{{--                            <a data-href="{{ route('admin.fangattr.destroy',['id'=>$item['id']]) }}" class="delbtn label label-warning radius">删除</a>--}}
                        </td>
                    </tr>
                @endforeach
                </tbody>
            </table>
        </div>
    </div>
@endsection
@section('js')
    <!--请在下方写此页面业务相关的脚本-->
    <script type="text/javascript" src="/admin/lib/My97DatePicker/4.8/WdatePicker.js"></script>
    <script type="text/javascript" src="/admin/lib/datatables/1.10.0/jquery.dataTables.min.js"></script>
    <script type="text/javascript" src="/admin/lib/laypage/1.2/laypage.js"></script>

    </script>
@endsection

数据表参考 房源表

CREATE TABLE `fangattrs` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `pid` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '上级ID',
  `field_name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '字段名',
  `name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '图标',
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  `deleted_at` timestamp NULL DEFAULT NULL,
  `icon` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

 //以上页面样式请自行书写,该页面采用H-ui.admin模版

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.海上月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值