\App\Console\CommandsRegionRestore

地区恢复命令

职责:从 gzip CSV 存档恢复地区数据(region:dump 产物)。解压 → TRUNCATE → 分批 INSERT → 同步序列 → 清地区统计缓存;与 RegionImport 同事务语义:TRUNCATE 与全部 INSERT 要么同成要么同败。

┌────────────────── 分区导航(按此顺序阅读)──────────────────┐ 分区 1 · 命令签名与说明 $signature / $description 分区 2 · 执行入口 handle 分区 3 · 内部辅助 toInsertRow / tableColumns └────────────────────────────────────────────────────────────┘

Summary

Methods
Properties
Constants
handle()
No public properties found
REGION_TABLE
forgetRegionCaches()
syncRegionSequence()
batchInsert()
flushInsert()
nullableColumns()
$signature
$description
N/A
toInsertRow()
No private properties found
N/A

Constants

REGION_TABLE

REGION_TABLE = 'td_sys_region'

地区表名(裸表名,SQL 拼接处走 DbSchema::prefix)

Properties

$signature

$signature

命令签名:region:restore,--file 指定存档路径(默认 database/data-source/region.csv.gz)

$description

$description

命令说明

Methods

handle()

handle() : int

执行恢复。

流程:① 校验存档存在且可读,解析当前库列与存档表头交集 ② 事务内真流式:TRUNCATE 后边读边插(2000 行/批),内存恒定 ③ PostgreSQL 同步自增序列;finally 中关闭 gzip 句柄 ④ DB 直插不触发模型事件,手动清地区统计与树缓存

Returns

int —

forgetRegionCaches()

forgetRegionCaches() : void

手动失效地区缓存(DB 直插/直改不触发模型事件时的单源收口)。 sys:region:tree 含地区全字段,缺失失效会让旧值残留。

syncRegionSequence()

syncRegionSequence() : void

同步地区序列(仅 pgsql;表名走 DbSchema::prefix(),勿硬编码 schema)

batchInsert()

batchInsert(array  $rows, int  $count, int  $batchSize = 2000) : void

批量攒插:行攒满 $batchSize 即插入并清空(内存恒定,防单条长事务)

Parameters

array $rows
int $count
int $batchSize

flushInsert()

flushInsert(array  $rows, int  $count) : void

尾部 flush:不足一批的剩余行落库

Parameters

array $rows
int $count

nullableColumns()

nullableColumns() : array<string,bool>

当前库表列 → 是否可空(按定义顺序;Schema 抽象,PG/sqlite 通吃—— 此前 RegionDump 的 information_schema 版仅 PG 可用,统一为可移植实现)。

Returns

array

列名 → true=可空(空值语义由调用方按列决定)

toInsertRow()

toInsertRow(array  $line, array<string,int>  $colIndex, array  $importCols, array  $tableColumns) : array

CSV 行 → 插入数组(按存档表头列下标映射定位列,O(1) 取列)。 空值表达按列的 is_nullable:可空列空串转 null;NOT NULL 列(如 postal_code default '')空串保持 '',避免违反非空约束。

Parameters

array $line
array $colIndex

表头列名 → 下标(array_flip 一次生成)

array $importCols
array $tableColumns

Returns

array —