代码生成器实战
本文是代码生成器的实战教程。参数和配置的完整参考请查看 代码生成器文档。
CLI 方式
基础用法
bash
cd server
php think make:crud执行后进入交互式流程:
- 选择数据表 — 显示所有数据表,输入编号选择
- 确认字段 — 显示表字段列表,可排除不需要的字段
- 选择模块名 — 指定模块目录名(如
article、product) - 确认生成 — 预览生成文件列表,确认后执行
指定表名生成
bash
php think make:crud --table=announcements跳过交互式选表,直接对指定表生成。
管理后台方式
在管理后台「开发工具 → 代码生成器」页面操作:
- 点击"导入表",选择目标数据表
- 点击"编辑",配置每个字段的表单类型、搜索条件、列表显示等
- 点击"预览",查看将要生成的代码
- 点击"生成",一键生成所有文件
生成后通常需要调整的地方
生成的代码是通用骨架,以下场景需要手动修改:
1. Repository — 自定义搜索条件
生成器默认为 varchar 字段生成模糊搜索,为 tinyint 生成精确匹配。如需更复杂的查询(日期范围、多表关联、排序规则),需手动修改 Repository 的 getSearchList 方法。
2. Service — 添加业务逻辑
生成的 Service 只有简单的 CRUD 转发。如需事务、事件触发、数据加工,在 Service 中补充:
php
public function create(array $data): array
{
Db::startTrans();
try {
$result = $this->xxxRepository->create($data);
// 添加业务逻辑...
$this->trigger('xxx.created', $result);
Db::commit();
return $result;
} catch (\Throwable $e) {
Db::rollback();
throw $e;
}
}3. Validate — 完善验证规则
生成器基于字段类型推断基础规则(require、max length),复杂规则(唯一性、条件验证、正则)需手动补充。
4. 前端 — UI 定制
生成的列表页和表单是标准布局。如需自定义列渲染(状态标签、图片预览)、富文本编辑器、级联选择器等,需在 Vue 组件中修改。
字段类型 → 表单组件映射
| 数据库类型 | 生成的表单类型 | 前端组件 |
|---|---|---|
| varchar / char | input | el-input |
| text / longtext | textarea | el-input type="textarea" |
| int / bigint | number | el-input-number |
| tinyint | switch | el-switch |
| decimal / float | number | el-input-number |
| date / datetime | date | el-date-picker |
| enum / set | select | el-select |
进阶场景
关联表
如果表中有外键(如 category_id),生成器会生成基础的 el-input-number。你需要手动改为下拉选择:
- 在 API 文件中添加获取分类列表的接口
- 在表单组件中用
el-select替换el-input-number - 在
onMounted中请求分类数据
树形结构
对于包含 pid 字段的自引用表(如分类表),生成器会生成普通列表。如需树形展示:
- Repository 中添加
getTree()方法,使用递归或order('pid')构建树 - 前端使用
el-table的row-key+tree-props属性 - 表单中使用
el-tree-select选择父级