一、代码部分
/**
* 获取全国省市区列表(格式化后)
*/
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