分类表: |
id |
department |
pid |
level |
1 |
行政部 |
14 |
1 |
2 |
市场部 |
14 |
1 |
3 |
财务部 |
14 |
1 |
4 |
外贸部 |
14 |
1 |
5 |
总经办 |
14 |
1 |
6 |
投标部 |
14 |
1 |
7 |
工程部 |
14 |
1 |
8 |
研发部 |
14 |
1 |
9 |
销售部 |
14 |
1 |
10 |
内销部 |
14 |
1 |
11 |
华南区 |
10 |
2 |
12 |
华北区 |
10 |
2 |
13 |
华东区 |
10 |
2 |
14 |
广州 |
0 |
0 |
15 |
广东 |
0 |
0 |
16 |
样板部 |
15 |
1 |
数据表 |
id |
name |
phone |
weixin |
qq |
email |
did(关联的分类ID) |
1 |
张三 |
10086 |
test |
10000 |
10000@qq.com |
1 |
2 |
李四 |
13800138000 |
test1 |
123456 |
123456@qq.com |
2 |
3 |
小明 |
13888888888 |
test23 |
987654 |
98654@qq.com |
11 |
如$id = 14
public function selectRosterList($id)
{
$data = db('department')->where('pid',$id)->select();
$rosters = [];
foreach ($data as $key=>$value){
$roster = db('roster')->where('did',$value['id'])->select();
$rosters = array_merge($rosters, $roster);
if ($value['pid'] != 0){
$this->selectRosterList($value['id']);
}
}
return $rosters;
}
为什么我这样写只能得到张三和李四的数据,却得不到小明的数据?
思路:
1、先递归出指定分类的所有子分类
2、根据子分类的id查询
$rosters = []; 每次递归,你这个都会初始化
不要把递归部门和查询人员放在一起,递归只用来查找这个部门下的所有子部门,递归出来一个部门数组,然后再查询部门ID在这些数组的人员