首先数据库表结构如下:
CREATE TABLE `menu` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '主键id',
`name` varchar(16) COLLATE utf8_unicode_ci NOT NULL COMMENT '发送的手机号',
`type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '来源 1 微信 2小程序 默认1',
`url` text CHARACTER SET utf8 COLLATE utf8_unicode_ci COMMENT '链接',
`pid` int NOT NULL DEFAULT '0' COMMENT '父级id 默认0 一级',
`ts` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '新增时间',
`up_ts` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_unicode_ci COMMENT='菜单表';
<?php
//进行处理
$menu = $this->recursionMenuData(0); //递归获取菜单
/**
* 递归获取菜单信息
* @param $pid 父级id 默认0 一级菜单
* @return array
*/
protected function recursionMenuData($pid = 0)
{
$menu = $this->model->getData('menu', ['pid' => $pid], ['name,type,url,pid,id']);
if (!empty($menu['total'])) {
foreach ($menu['list'] as $key => $value) {
//$children = $this->model->getData('menu', ['pid' => $value['id']], ['name,type,url,pid,id']);
$children = $this->recursionMenuData($value['id']);
$menu['list'][$key]['children'] = $children['list'];
}
unset($value);
}
return $menu;
}