--- name: "ulthon-scheme-definition" description: "指导编写 Ulthon Admin 的 Scheme 文件,定义数据库表结构与后台管理界面组件。涵盖注解方式(scheme:sync:代码 → DB)与字段注释方式(scheme:make:DB → 代码)。" --- # Ulthon Scheme 定义指南 本技能指导如何在 `app/admin/scheme/` 目录下编写 Scheme 文件,这些文件定义了数据库表结构以及后台管理界面的组件呈现方式。 参考文档:[表结构-ulthon_admin](https://doc.ulthon.com/read/augushong/ulthon_admin/619efc9d7af62/zh-cn/2.x.html) ## 何时调用 - 新增表结构、修改字段定义或配置后台管理界面组件呈现方式 - 通过字段注释反向生成 Scheme 代码(`scheme:make`,DB → 代码) - 通过 Scheme 类正向同步到数据库(`scheme:sync`,代码 → DB) ## Scheme 类基本结构 Scheme 文件是一个 PHP 类,继承自 `BaseScheme`,并使用 PHP 8 注解(Attribute)来描述元数据。 ```php '男', '2' => '女'])] public $gender; ``` `options` 支持索引数组 `['禁用', '启用']` 或关联数组 `['1' => '男', '2' => '女']`;对于 `relation`/`table`/`city` 类型,则是配置参数数组。 ### 字段注释方式(`scheme:make` 用) 通过字段注释语法在数据库层声明组件: ``` 名称 {类型} (数据集) ``` - 类型用 `{}` 包起来,例如 `{radio}` - 数据集用 `()` 包起来,例如 `(1:男, 2:女, 0:未知)` - 数据集索引可用数字或英文单词,不要使用其他字符和空格 示例:`性别 {radio} (1:男, 2:女, 0:未知)` ## 关联表(relation)参数 `relation` 类型用于关联表下拉选择,`options` 需包含: | 参数 | 说明 | 备注 | |------|------|------| | `table` | 关联表名 | 必填 | | `relationBindSelect` | 表单下拉关联字段 | 必填 | | `primaryKey` | 关联表主键 | 非必填 | | `modelFilename` | 模型文件 | 非必填,不建议指定,可自动生成 | | `onlyFields` | 列表页显示字段 | 可指定,用 `\|` 分隔。**写错键名会导致列表字段配置静默失效。** | 字段注释完整写法示例: ``` 标签 {relation} (table:tag,relationBindSelect:title,primaryKey:id,onlyFields:title|time_image|username|phone) ``` `table` 类型(表格选择器)参数类似,`options` 需包含:`table`、`type`(`checkbox`/`radio`)、`valueField`、`fieldName`。 ## 编写规范 1. **命名规范**:文件名采用大驼峰(PascalCase),且必须与类名一致。 2. **时间字段**:统一使用 `int` 存储 Unix 时间戳,默认 `0`,非空。不要使用 `datetime`/`timestamp`。 3. **软删除**:`delete_time` 字段(`int`,默认 `0`)存在时,模型自动启用软删除机制。查询时不要手写 `delete_time` 条件。 4. **状态表达**:避免使用 MySQL ENUM 类型。优先使用 `int` 或 `tinyint` 配合 `#[Component(type: 'radio')]` 或 `#[Component(type: 'switch')]`。 5. **注释约定**:`Field` 的 `comment` 会直接同步到数据库字段注释,同时也作为后台表单的 Label。 6. **默认值约定**:设计时尽量设置默认值。 7. **分隔符**:多图片/多文件类型默认分隔符为竖线 `|`。