在设计权限库时遇到了对象和数组生成的问题,欢迎大家来讨论

思路: 通过数据表(menu)来记录菜单栏与子菜单, 然后通过权限表给对应用户分配权限;

数据表:
| id | fatherId | title |
| ———— | ———— | ———— |
| 1 | 0 | 管理员管理 |
| 2 | 0 | 用户管理 |
| 3 | 2 | 账号管理 |
| 4 | 2 | 权限管理 |
| 5 | 0 | 部门管理 |
| 6 | 0 | 部门组管理 |

理想生成数据格式:
[{“title”:”控制台”},{“title”:”管理员管理”,”children”:[{“title”:”账号管理”,”href”:”sys/admin”}]},{“title”:”用户管理”,”children”:[{“title”:”账号管理”,”href”:”sys/user”},{“title”:”权限管理”,”href”:”sys/power”}]},{“title”:”部门管理”},{“title”:”部门组管理”}]

开发思路:
//首先获取所有菜单
$data = DB::table(“menu”)->where(‘isDel’,0)->get();
//遍历数据
$list = [];
foreach ($data as $key => $value) {
//先找到顶级菜单
if ($value->fatherId==0) {
$list[]=$value;
}else{
//找到与顶级相关的子级菜单,并在数组中生成对象
}}
return $list;

在else里面不知道怎么往对象中插入 children,并且往children中加入 子菜单数据…

还原讨论

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

感觉你说的东西是 ORM 关联关系做简单很多

5年前 评论
ct4477xx_join (楼主) 5年前
讨论数量: 4
    //首先获取所有菜单
    $data = DB::table("menu")->where('isDel', 0)->get();
    //遍历数据
    $list = [];
    foreach ($data as $key => $value) {
        $fatherId = $key['fatherId'];
            if ($value->fatherId == $fatherId) {
                if($value->id!==1) {
                    $value->children = [];
                }
                $list[] = $value;
            }
    }
    return $list;

父级代码如上,,继续研究 children 里面的对象怎么放进去 :joy: 持续更新,到解决完….给那些像我一样努力的新人

5年前 评论

实现后的代码如下, 给到和我一样的新人学习 , 不过想研究 怎么只读取一次数据库 然后 进行渲染,,,继续研究

    $data = DB::table("menu")->where('isDel', 0)->get();
    $list = [];
    foreach ($data as $key => $value) {
        $fatherId = $key['fatherId'];
        if ($value->fatherId == $fatherId) {
            if ($value->id !== 1) {
                $value->children = DB::table("menu")->where('fatherId', $value->id)->get();
            }
            $list[] = $value;
        }
    }
    return $list;
5年前 评论
ct4477xx_join (作者) (楼主) 5年前
lji123123

感觉你说的东西是 ORM 关联关系做简单很多

5年前 评论
ct4477xx_join (楼主) 5年前

ORM方式

Controoler:

$data = Menu::where(['fatherId'=>0,'isDel'=>0]) ->select('id','title','href','fontFamily','icon','spread','isCheck') ->with(['children:fatherId,title,href,fontFamily,icon,spread']) ->get();

Model

public function children() { return $this->hasMany(Menu::class,'fatherId','id'); }

5年前 评论

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