alias('ur') ->join('roles r','r.id = ur.roles_id') ->where('ur.user_id',$uid) ->where('r.org_id',$orgId) ->where('r.type',0) ->column('ur.roles_id'); $oldroles = $oldroles?$oldroles:[]; $delroles = array_diff($oldroles,$roles); $addroles = array_diff($roles,$oldroles); Db::startTrans(); try{ if($delroles){ $res = Db::name('user_roles')->where('user_id',$uid)->where('roles_id','in',$delroles)->delete(); if($res != count($delroles)){ \exception('操作失败'); } } if($addroles){ $data = []; foreach ($addroles as $k=>$v){ $data[] = [ 'user_id' => $uid, 'roles_id' => $v, ]; } $ret = Db::name('user_roles')->insertAll($data); if($ret != count($addroles)){ \exception('操作失败'); } } Db::commit(); }catch (Exception $e){ Db::rollback(); HelpHander::error('操作失败'); } return true; } }