一、代码部分
/*** 获取全国省市区列表(格式化后)*/public function getRegionList(){$data = CoreRegion::find()->select(['national_code', 'region_name', 'parent_id', 'region_level'])->asArray()->all();$data = $this->assembleRegionData($data);return $data;}/*** 重组地区数据*/public function assembleRegionData($data, $pid = 0){$list = [];foreach ($data as $k => $v) {if ($v['parent_id'] == $pid) {// 继续查找其子市区县$v['list'] = $this->assembleRegionData($data, $v['national_code']);// 如果子地区为空,则unset掉if (empty($v['list'])) {unset($v['list']);}$list[] = $v;}}return $list;}
二、效果
三、改进代码,将地区列表数据存入缓存(可选)
由于地区列表数据基本是不会变的,所以最好是存入redis等缓存数据库,这里将数据存入redis
代码:
public function getRegionList(){$region_key = 'region_list_key_redis';$data = \Yii::$app->cache->get($region_key);// 如果数据不空,则返回数据if (isset($data) && !empty($data)) {return $data;} else {// 如果数据为空,则查询之后设置缓存,并返回数据$data = CoreRegion::find()->select(['national_code', 'region_name', 'parent_id'])->asArray()->all();$data = $this->assembleRegionData($data);\Yii::$app->cache->set($region_key, $data);return $data;}}
四、sql 文件附件
https://download.csdn.net/download/m_nanle_xiaobudiu/10904306