123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422 |
- <?php
- namespace app\common\model;
- use think\facade\Db;
- class Area extends BaseModel
- {
-
- public function getAreaList($condition = array(), $fields = '*', $group = '', $limit = 0, $order = '')
- {
- return Db::name('area')->where($condition)->field($fields)->limit($limit)->order($order)->group($group)->select()->toArray();
- }
-
- public function getAreaInfoById($id)
- {
- $data = $this->getCache();
- return $data['name'][$id];
- }
-
- public function getAreaInfo($condition = array(), $field = '*')
- {
- return Db::name('area')->where($condition)->field($field)->find();
- }
-
- public function getTopLevelAreas()
- {
- $data = $this->getCache();
- $arr = array();
- foreach ($data['children'][0] as $i) {
- $arr[$i] = $data['name'][$i];
- }
- return $arr;
- }
-
- public function getCityProvince()
- {
- $data = $this->getCache();
- $arr = array();
- foreach ($data['parent'] as $k => $v) {
- if ($v && isset($data['parent'][$v]) && $data['parent'][$v] == 0) {
- $arr[$k] = $v;
- }
- }
- return $arr;
- }
-
- public function getAreas()
- {
- return $this->getCache();
- }
-
- public function getAreaNames()
- {
- $data = $this->getCache();
- return $data['name'];
- }
-
- public function getAreaArrayForJson($src = 'cache')
- {
- if ($src == 'cache') {
- $data = $this->getCache();
- } else {
- $data = $this->_getAllArea();
- }
- $arr = array();
- foreach ($data['children'] as $k => $v) {
- foreach ($v as $vv) {
- $arr[$k][] = array($vv, $data['name'][$vv]);
- }
- }
- return $arr;
- }
-
- public function editArea($data = array(), $condition = array())
- {
-
- $this->dropCache();
- return Db::name('area')->where($condition)->update($data);
- }
-
- public function addArea($data)
- {
-
- $this->dropCache();
- return Db::name('area')->insertGetId($data);
- }
-
- public function delAreaByAreaIds($area_ids)
- {
- $area_arr = explode(',', $area_ids);
- if (empty($area_arr)) {
- return false;
- }
- $condition = array();
- $condition[] = array('area_parent_id', 'in', $area_arr);
- $child_list = $this->getAreaList($condition);
- if (!empty($child_list)) {
- foreach ($child_list as $v) {
- $area_child_arr[] = $v['area_id'];
- }
- $area_child_ids = implode(',', $area_child_arr);
- $this->delAreaByAreaIds($area_child_ids);
- }
-
- $condition = array();
- $condition[] = array('area_id', 'in', $area_arr);
- $this->delArea($condition);
- }
-
- public function delArea($condition)
- {
-
- $this->dropCache();
- return Db::name('area')->where($condition)->delete();
- }
-
- public function dropCache()
- {
- $this->cachedData = null;
- dkcache('area');
- }
-
- protected function getCache()
- {
-
- if ($this->cachedData !== null)
- return $this->cachedData;
-
- if ($data = rkcache('area')) {
- $this->cachedData = $data;
- return $data;
- }
-
- $data = $this->_getAllArea();
- wkcache('area', $data);
- $this->cachedData = $data;
- return $data;
- }
- protected $cachedData;
-
- private function _getAllArea()
- {
- $data = array();
- $area_all_array = Db::name('area')->select()->toArray();
- foreach ((array)$area_all_array as $a) {
- $data['name'][$a['area_id']] = $a['area_name'];
- $data['parent'][$a['area_id']] = $a['area_parent_id'];
- $data['children'][$a['area_parent_id']][] = $a['area_id'];
- if ($a['area_deep'] == 1 && $a['area_region'])
- $data['region'][$a['area_region']][] = $a['area_id'];
- }
- wkcache('area', $data);
- $this->cachedData = $data;
- return $data;
- }
-
- public function getAreaListByParentId($pid)
- {
- $data = $this->getCache();
- $ret = array();
- foreach ((array)$data['children'][$pid] as $i) {
- if ($data['data'][$i]) {
- $ret[] = $data['data'][$i];
- }
- }
- return $ret;
- }
-
- public function getTopAreaName($area_id, $area_name = '')
- {
- $info_parent = $this->getAreaInfo(array('area_id' => $area_id), 'area_name,area_parent_id');
- if ($info_parent) {
- return $this->getTopAreaName($info_parent['area_parent_id'], $info_parent['area_name']) . ' ' . $info_parent['area_name'];
- }
- }
-
- public function getChildrenIDs($area_id)
- {
- $result = array();
- $list = $this->getAreaList(array('area_parent_id' => $area_id), 'area_id');
- if ($list) {
- foreach ($list as $v) {
- $result[] = $v['area_id'];
- $result = array_merge($result, $this->getChildrenIDs($v['area_id']));
- }
- }
- return $result;
- }
-
- public function getChildsByPid($pid)
- {
- $data = $this->getCache();
- if (!isset($data['children'][$pid])) {
- return false;
- }
- $ret = array();
- foreach ((array)$data['children'][$pid] as $i) {
- $ret[] = $i;
- $ret_temp = $this->getChildsByPid($i);
- if ($ret_temp != false) {
- foreach ($ret_temp as $v) {
- $ret[] = $v;
- }
- }
- }
- return $ret;
- }
-
- public function GetChildName($pid)
- {
- return Db::name('area')->field('area_id,area_name')->where(array('area_parent_id' => $pid))->select()->toArray();
- }
-
- public function getAreaChild($parent_id = -1)
- {
- $map = array();
- if ($parent_id >= 0) {
- $map['area_parent_id'] = $parent_id;
- }
- return Db::name('area')->where($map)->order('area_sort')->select()->toArray();
- }
- }
|