寻求更好的代码写法

假设有2张表

CREATE TABLE IF NOT EXISTS `structure` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(64) DEFAULT '' COMMENT '名称',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT = '部门表';

CREATE TABLE IF NOT EXISTS `structure` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `realname` varchar(64) DEFAULT ''  COMMENT '姓名',
  `structure_id` int(11) DEFAULT NULL COMMENT '所属部门',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT = '用户表';

部门表跟人员表是一个一对多的关系,请问编写接口如何生成这种结构?

{
    data: [{
        'id': '', // 部门ID
        'name': '', // 部门名称
        'list': [{ // 用户列表
            'id': '', // 用户ID
            'realname' : '', // 用户姓名
        }],
    }]
}

现在我有一个写法,但是总觉得不是太好(用的是tp5语法), 即是把数据都查出来再处理入数组中。

function test()
{
    $structure = Db::name('structure')->select();
    $user = Db::name('user')->select();
    foreach ($structure as &value) {
        foreach ($user as $k => $v) {
            if ($value['id'] == $v['structure_id']) {
                $value['list'][] = $v;
                unset($user[$k]);
            }
        }
    }
    
    return $structure;
}
慕莱坞森
浏览 401回答 1
1回答

SMILET

你这个思路不对啊,应该是关联查询才对。sql: select * from 部门表 left join 用户表 on 部门表的id = 用户表的部门id 这样得到的结果集就是以部门为主用户为辅的数据集,最后对它做一次遍历组合成你那种格式的数据就ok了。
打开App,查看更多内容
随时随地看视频慕课网APP