发布于2026-07-13 阅读(0)
扫一扫,手机访问
需要注意的是:调试模式下缓存不生效,另外得确保数据库用户有 `information_schema.COLUMNS` 的查询权限,否则注释读不到。
### 开启字段缓存并生成文件
先检查 `config/database.php`,确认这几项没问题:
- `'fields_cache' => true`(注意拼写是 **fields_cache**,不是 fileds_cache)
- 数据库用户要有 `SELECT` 权限访问 `information_schema.COLUMNS`(不然读不到注释)
- 执行命令生成缓存:`php think optimize:schema`
- 生成的缓存文件会放在 `runtime/schema/` 下,命名规则是 `数据库名.表名.php`
### schema 和 fields_cache 别混用
`$schema` 是模型里硬写的字段映射,只对当前模型生效;`fields_cache` 是运行时生成的通用缓存,对 `Db::name()` 和所有继承 `think\Model` 的模型都生效。两者目标一致,但逻辑不同——选一个就好,推荐用缓存,省事。
几点值得注意:
- 如果写了 `$schema` 又开了 `fields_cache`,框架优先走缓存,`$schema` 会被忽略
- `$schema` 必须写全表所有字段,漏一个就可能触发自动探测,导致类型错误或缓存失效
- 缓存生成后,改了数据库字段(比如加字段、改类型),必须重新执行 `php think optimize:schema`
### 中文注释能读出来吗?关键看权限和驱动
字段注释(`column_comment`)不会随基础字段信息自动带出,得靠 `information_schema.COLUMNS` 查。常见卡点:
- MySQL 8.0+ 默认限制对 `information_schema` 的访问,确认用户有 `SELECT` 权限
- 用原生 SQL 验证:`SELECT column_name, column_comment FROM information_schema.COLUMNS WHERE table_schema = 'your_db' AND table_name = 'user';`
- MariaDB 对 `COMMENT` 字段别名支持不一致,建议统一用 MySQL 官方驱动
- 云数据库(如阿里云 RDS)可能屏蔽 `column_comment`,此时只能靠建表语句或文档补全
### 生成后怎么用?基本不用额外操作
缓存生效后,模型查询、Db 查询、验证器字段类型推导、甚至自动生成文档或 Swagger Schema 都能直接用到字段元信息。实际感受:
- 模型无需再写 `$schema`,也不用担心字段类型错(比如 int 被当 string)
- Db 类执行 `Db::name('user')->field('id,name')->select()` 也能正确识别字段类型
- 配合自定义命令(如 `gen:doc` 或 `schema`),可基于缓存快速输出 Markdown 或 OpenAPI 文档
- 注意:缓存仅在部署模式(`app_debug = false`)下生效,开发时设为 true 会跳过缓存
最后提醒一句:别在开发模式下指望它,真要到生产环境才发光。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8