# core 快速参考

`@ts-grm/core` 提供模型、视图、Input、DSL 的类型与运行时（不依赖数据库）。本页是前五章用到的 API 速查；每个条目标注详细页码。

## model：实体声明

```ts
model(name, idKey, class, configurator?)                 // 普通实体（继承页）
model.abstract(name, idKey, class, configurator?)        // 抽象基类（可查询，不实例化）
model.extends(superModel)(name, class, configurator?)    // 继承；默认独立子表，TABLE_INHERIT 合表
```

- 配置器 `ctx`：`ctx.table({ name, discriminator, discriminatorValue })`、`ctx.unique(...)`；
- 常量：`TABLE_INHERIT`（单表继承）、`DISCRIMINATOR_VALUE_MODEL_NAME`（判别值=模型名）；
- 详见：「核心概念 → 模型」「继承与多态」「单表继承」。

## prop：属性声明

| 族 | 写法 |
|---|---|
| 整数 | `i8() i16() i32() i64()`（`i64().asString()` 超 2⁵³ 用 string） |
| 数值 | `num(p, s)` 定点、`f32() f64()` 浮点 |
| 字符串 | `str(n)` 定长、`text()` 长文本 |
| 其它标量 | `bool() dt()` |
| 结构 | `json(schema)` / `jsonb(schema)`（StandardSchemaV1）、`embedded({...})` |
| 枚举 | `enum({K:V})` / `enum(...)` 值列表、`enumSet(...)` 集合 |
| 关联 | `o2o() m2o() o2m() m2m()`（joinColumns/joinTable/joinEntity，见「关联」） |
| 计算 | `formula.ts(...)` / `formula.sql(...)`、`calculated.collection(...)`（见「公式与计算属性」） |

通用链：`.nullable()` 可空、关联 `.mappedBy()` / `.orderBy()` / `.joinColumns({cascade})`。
详见：「核心概念 → 属性与类型」「关联」「复合值」「公式」。

## dto：视图与 Input

```ts
dto.view(Model, c => [...])                 // 查询取形（Tree 形状）
dto.view(Model, ...).nullAsUndefined 变体    // 空值给 undefined
// input 在「变更 API」章（上游 0.0.x 设计预览）
```

取形符号（`c` 为映射上下文）：

| 符号 | 含义 |
|---|---|
| `c.属性` / `c.$allScalars[.exclude("x")]` | 标量/全量标量 |
| `c.关联.with(c => [...])` | 嵌套取形（m2o 对象 / o2m 数组） |
| `c.$flat("关联").prefix("p")` | 扁平化平铺 |
| `c.$fold("键", c => [...])` | 折叠重分组 |
| `c.$recursive("关联").as("别名")` | 递归树 |
| `c.$instanceOf(子类, c => [...])` | 多态分支 |
| `c.字段.mapOutput(schema, fn)` | 输出转换 |

详见：「快速上手 → 视图」「查询 → 取形进阶」「继承与多态」。

## dsl：查询表达式工具

```ts
// 条件：and or not、native（num/str 表达式）
dsl.and(…preds)  dsl.or(…)  dsl.not(…)
dsl.native.num `…`   dsl.native.str `…`

// 聚合：count sum min max avg
dsl.count()  dsl.sum(expr)  dsl.min(expr)  dsl.max(expr)  dsl.avg(expr)

// 子查询 / 集合运算
dsl.subQuery(Model, cb)   dsl.associationModel(Model, "prop")
dsl.exists(…)  dsl.notExists(…)
dsl.baseQuery(Model, cb)  dsl.unionAll(…)  dsl.union(…)  dsl.intersect(…)  dsl.except(…)
dsl.derivedModel(…)  dsl.cteModel(…)（PG 方言注意见「CTE」页）

// 其它
dsl.tuple(a, b)（多列 IN）  dsl.constant(v)
```

详见：「查询 API」全章。

## 元数据 / 其它导出

- `EntityManager.of(baseDir, paths)` / `combine(...)`（模型发现，见「模式创建」）；
- `SqlFormula / TsFormula / Calculator`（公式族）；
- `ScalarProvider` / `ScalarType`（自定义数据类型，见「查询 → 自定义数据类型」）；
- 命名策略与 SPI 在 `@ts-grm/core` 的 `spi` 命名空间导出。
