?一、代碼部分
/*** 獲取全國省市區列表(格式化后)*/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
?
?