商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > ThinkPHP 数据库配置文件 schema 自动生成【偷懒】

ThinkPHP 数据库配置文件 schema 自动生成【偷懒】

  发布于2026-07-13 阅读(0)

扫一扫,手机访问

核心思路很简单:别手动写 `$schema`,用 `fields_cache` 配合 `php think optimize:schema` 生成缓存就完事了。这不是什么奇技淫巧,而是框架官方推荐的高效路径——缓存一旦生成,模型和 `Db` 类都能自动获取字段的类型、长度、是否为空等元信息,比硬编码稳得多,也省心。 ThinkPHP 数据库配置文件 schema 自动生成【偷懒】 需要注意的是:调试模式下缓存不生效,另外得确保数据库用户有 `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 会跳过缓存 最后提醒一句:别在开发模式下指望它,真要到生产环境才发光。
本文转载于:https://www.php.cn/faq/2814440.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注