[ PROMPT_NODE_25918 ]
PocketBase Collections
[ SKILL_DOCUMENTATION ]
# PocketBase 集合与模式设计
## 集合类型
### 基础集合 (Base Collection)
标准数据集合。系统字段:`id`, `created`, `updated`。
### 认证集合 (Auth Collection)
扩展了基础集合并增加了认证功能。额外的系统字段:`email`, `emailVisibility`, `verified`, `password`, `tokenKey`。
无法删除系统字段。可以在集合选项中禁用电子邮件/密码认证。
### 视图集合 (View Collection)
只读,由 SQL SELECT 查询支持。不支持创建/更新/删除。字段从查询中自动检测。适用于聚合、连接和计算视图。
sql
-- 示例:视图集合查询
SELECT p.id, p.title, COUNT(c.id) as comments_count
FROM posts p LEFT JOIN comments c ON c.post = p.id
GROUP BY p.id
视图集合支持 API 规则(仅限 list/view),并可用于关系中。
## 字段类型
| 类型 | Go 类型 | 零值默认 | 注意 |
|------|---------|-------------|-------|
| `text` | `string` | `""` | 最小/最大长度,正则表达式 |
| `editor` | `string` | `""` | 富文本(已清理的 HTML) |
| `number` | `float64` | `0` | 最小/最大值,`noDecimal` 选项 |
| `bool` | `bool` | `false` | |
| `email` | `string` | `""` | 自动验证格式 |
| `url` | `string` | `""` | 自动验证格式 |
| `date` | `string` | `""` | ISO 8601 (`2024-01-01 00:00:00.000Z`) |
| `select` | `string`/`[]string` | `""`/`[]` | `values` 列表,`maxSelect` |
| `file` | `string`/`[]string` | `""`/`[]` | `maxSelect`, `maxSize`, `mimeTypes` |
| `relation` | `string`/`[]string` | `""`/`[]` | `collectionId`, `cascadeDelete`, `maxSelect` |
| `json` | `any` | `null` | 唯一可以为 null 的类型!`maxSize` |
| `autodate` | `string` | 自动 | `onCreate`/`onUpdate` 修饰符 |
| `password` | `string` | `""` | 存储为哈希值,从不返回 API |
**关键点**:所有类型默认均为其零值,而非 null。只有 `json` 字段可以为 null。
## 字段修饰符
在集合模式定义中使用:
- **`required`** — 字段不能为空/零值
- **`unique`** — 唯一约束(通过唯一索引实现复合)
- **`presentable`** — 包含在关系显示中
- **`hidden`** — 从 API 响应中排除,除非明确请求
- **`:autogenerate`** — 用于 `text` 字段:自动生成值(例如从其他字段生成 slug)
## 关系模式
### 一对多
posts.author -> users (maxSelect: 1)
每篇文章有一位作者。按作者查询文章:`author = "USER_ID"`。
### 多对多
posts.tags -> tags (maxSelect: 0, 意味着无限制)
多选关系。