\App\ModelsSysMenu

系统菜单

职责:后台菜单,支持无限级树形结构;集中承载菜单类型、层级上限、容器归属 等树形规则判定。类型:1=目录, 2=页面, 3=外链, 4=容器。

Summary

Methods
Properties
Constants
parent()
children()
timestampCasts()
permissions()
roles()
typeMaxLevel()
allowedChildTypes()
isUnderContainer()
getLevel()
getSubtreeDepth()
canMoveTo()
$timestamps
$id
$parent_id
$type
$name
$path
$query
$component
$component_name
$icon
$link_target
$sort
$is_keep_alive
$is_affix
$status
$tag
$create_time
$update_time
$children
$permissions
MAX_DEPTH
TYPE_DIR
TYPE_PAGE
TYPE_LINK
TYPE_CONTAINER
STATUS_HIDDEN
serializeDate()
casts()
$table
$fillable
N/A
snapshot()
No private properties found
N/A

Constants

MAX_DEPTH

MAX_DEPTH = 4

树形层级上限

TYPE_DIR

TYPE_DIR = 1

目录

TYPE_PAGE

TYPE_PAGE = 2

页面

TYPE_CONTAINER

TYPE_CONTAINER = 4

容器

STATUS_HIDDEN

STATUS_HIDDEN = 2

状态:隐藏(路由可访问,侧边栏不显示)

Properties

$timestamps

$timestamps

$id

$id : int

主键ID

Type

int

$parent_id

$parent_id : int

父菜单ID,0 表示顶级

Type

int

$type

$type : int

菜单类型:1 目录、2 页面、3 外链、4 容器

Type

int

$name

$name : string

菜单名称

Type

string

$path

$path : string

前端路由路径或完整URL

Type

string

$query

$query : string

路由参数

Type

string

$component

$component : string

前端页面组件路径

Type

string

$component_name

$component_name : string

前端组件名称,keep-alive 缓存用

Type

string

$icon

$icon : string

图标标识

Type

string

$link_target

$link_target : string

外链打开方式:_self 当前窗口,_blank 新窗口

Type

string

$sort

$sort : int

排序号

Type

int

$is_keep_alive

$is_keep_alive : int

是否缓存页面:1 缓存,0 不缓存

Type

int

$is_affix

$is_affix : int

是否固定标签页:1 固定,0 不固定

Type

int

$status

$status : int

状态:1 启用,0 停用,2 隐藏,隐藏时路由可访问、侧边栏不显示

Type

int

$tag

$tag : string

标签徽章文字

Type

string

$create_time

$create_time : string

创建时间

Type

string

$update_time

$update_time : string|null

更新时间

Type

string|null

$children

$children : \Illuminate\Database\Eloquent\Collection

子菜单列表

Type

\Illuminate\Database\Eloquent\Collection

$permissions

$permissions : \Illuminate\Database\Eloquent\Collection

权限列表

┌────────────────── 分区导航(按此顺序阅读)──────────────────┐ 分区 1 · 常量 本地枚举(启停状态 STATUS_* 已单源 HasStatusConstants) 分区 2 · 表名与属性 $table / $fillable / casts 分区 3 · 关联关系 parent / children / permissions / roles 分区 4 · 类型与层级规则 typeMaxLevel / allowedChildTypes / isUnderContainer / getLevel / getSubtreeDepth / canMoveTo 分区 5 · 内部辅助 snapshot └────────────────────────────────────────────────────────────┘

Type

\Illuminate\Database\Eloquent\Collection

$table

$table

$fillable

$fillable

Methods

parent()

parent() : \Illuminate\Database\Eloquent\Relations\BelongsTo

上级菜单

Returns

\Illuminate\Database\Eloquent\Relations\BelongsTo —

children()

children() : \Illuminate\Database\Eloquent\Relations\HasMany

下级菜单

Returns

\Illuminate\Database\Eloquent\Relations\HasMany —

timestampCasts()

timestampCasts() : array<string,string>

全库统一的时间列 cast 段(单源:约 22 个模型 casts() 内重复的两行)。 使用方模型 casts() 内 `return array_merge(self::timestampCasts(), [...])`。

Returns

array

permissions()

permissions() : \Illuminate\Database\Eloquent\Relations\HasMany

菜单下的权限

Returns

\Illuminate\Database\Eloquent\Relations\HasMany —

roles()

roles() : \Illuminate\Database\Eloquent\Relations\BelongsToMany

拥有该菜单的角色(多对多,经 td_sys_role_menu 表,角色管功能)。

Returns

\Illuminate\Database\Eloquent\Relations\BelongsToMany —

typeMaxLevel()

typeMaxLevel(int  $type, bool  $underContainer) : int

各类型允许的最大层级(1=顶级)。

目录规则依赖上下文:不在容器内 ≤L2,在容器内 ≤L3。 容器仅 L1,页面/外链 ≤L3。

Parameters

int $type
bool $underContainer

Returns

int —

allowedChildTypes()

allowedChildTypes(int  $parentType, bool  $underContainer) : array

各类型允许的子级类型列表。

容器下的目录只能放目录,不能放页面和外链。

Parameters

int $parentType
bool $underContainer

Returns

array —

isUnderContainer()

isUnderContainer(?int  $menuId) : bool

判断指定菜单 ID 的祖先链上是否存在容器。

全表快照(请求级内存缓存)上溯,替代逐层查库递归(避免每层一次 find)。

Parameters

?int $menuId

Returns

bool —

getLevel()

getLevel() : int

当前菜单距离根节点的层级(1=顶级)。

全表快照上溯,替代逐层 find(避免每层一次查询)。

Returns

int —

getSubtreeDepth()

getSubtreeDepth() : int

从当前菜单算起,子树的最大深度(含自身,最小为 1)。

例:父 → 子 → 孙 返回 3。

全表快照内存 DFS,替代逐层递归查库(避免每节点一次查询)。

Returns

int —

canMoveTo()

canMoveTo(?int  $newParentId) : bool

检查能否将当前菜单(含子树)移动到目标父节点,不超出 MAX_DEPTH。

Parameters

?int $newParentId

Returns

bool —

serializeDate()

serializeDate(\DateTimeInterface  $date) : string

所有日期属性统一按 "年-月-日 时:分:秒" 序列化。

Parameters

\DateTimeInterface $date

Returns

string —

casts()

casts() : array

Returns

array —

snapshot()

snapshot() : \Illuminate\Support\Collection

全表快照(id → {id,type,parent_id},请求级内存缓存)。

层级/容器/深度校验共用的单次查询内存表——替代逐层查库递归; 菜单表量小(数十行),全量快照成本低于多轮点查。

Returns

\Illuminate\Support\Collection —