如标题所示,这边用修改上级,然后更改所有与我有关系的下级关系树
数据结构 pids string类型,例如:'22,12,10,9,3,1'
如:
用户A的id为25,上级为22,上级树pids为’22,12,10,9,3,1’
用户B的id为26,上级为25(A的下级),上级树为’25,22,12,10,9,3,1’
用户C的id为27,上级为26(B的下级),上级树为’26,25,22,12,10,9,3,1’
需求:
将A的上级id,从22更改为23,已知id为23的关系树为’19,16,11,5’,则A的关系树变为’23,19,16,11,5’
要求更改A的所有下级的关系树
如:B的关系树更改为’25,23,19,16,11,5’
C的关系树更改为’26,25,23,19,16,11,5’
主要方法
- Db::raw(“FIND_IN_SET($id,pids)”)
发现pids中有用户id的数据,(不更新的话可以用这个方法,查询出所有的下级) - ->exp
//变量解释:$id:用户A的id,$ord_pids :用户A旧的关系树,$news_pids 用户A新的关系树
$where = [];
//
$where[] = ['exp',Db::raw("FIND_IN_SET($id,pids)")];
$old_pids = $ord_pids ? $id.','.$ord_pids: $id;//旧数据
$news_pids = $pids ? $id.','.$pids : $id;//新数据
//更新与我相关的所有关系链
Db::name('user')
->where($where)
//exp用新数据替换旧数据
->exp('pids', "replace(pids,'" . $old_pids . "','" . $news_pids . "')")
->update();