thinkphp 6.0 起集成 think-migration 实现数据库迁移与模型生成:先用 php think migrate:create 创建迁移文件并编辑 up()/down() 方法,再 php think migrate:run 执行;已有表可用 php think make:model user --table=users 生成模型,推荐“迁移→建表→生成模型”闭环流程。

ThinkPHP 自带的命令行工具支持数据库迁移(Migration)和模型生成,但需注意:官方从 ThinkPHP 6.0 开始正式集成 think-migration 扩展,并在 TP7 中进一步优化。实际使用中,迁移与模型生成是两个独立但常配合使用的功能,不是一键全自动完成,需要合理组合命令与配置。
启用迁移功能并创建迁移文件
迁移用于版本化管理数据库结构变更,避免手动 SQL 同步出错。
- 安装迁移扩展:
composer require topthink/think-migration(TP6/TP7 兼容) - 生成迁移文件(例如建 users 表):
php think migrate:create CreateUsersTable,会在database/migrate/下生成带时间戳的 PHP 文件 - 编辑生成的迁移文件,在
up()方法中用Schema::create()定义表结构;down()中写回滚逻辑(如Schema::dropIfExists('users')) - 执行迁移:
php think migrate:run;回滚上一次:php think migrate:rollback
根据现有表自动生成模型类
已有数据库表时,可快速生成对应模型,省去手动定义字段和配置的步骤。
- 确保数据库连接配置正确(
app/database.php或环境变量) - 运行命令:
php think make:model User→ 生成app/model/User.php - 加
--table=users参数可指定表名(尤其当模型名与表名不一致时):php think make:model User --table=users - 加
--force覆盖已有文件;加--with-dump会同时导出当前表结构注释到模型中(TP7 支持)
结合迁移与模型实现开发闭环
推荐工作流:先写迁移 → 执行迁移建表 → 再生成模型 → 开发业务逻辑。
- 迁移文件中建议显式声明主键、时间戳字段(如
$table->id()、$table->timestamps()),便于后续模型自动识别 - 生成模型后,可手动补充验证规则、关联关系、访问器等,迁移不负责这部分
- 若表已存在且字段较多,可用
php think schema:export(TP7 新增)导出现有表结构为迁移文件,再调整后提交版本控制
常见问题与注意事项
迁移和模型生成看似简单,但几个细节容易导致失败或不符合预期。
- 迁移命令依赖
think-migration的配置,检查config/migrate.php是否存在且table项未被误删(默认为migration) - 模型生成默认使用
snake_case表名转PascalCase类名,如user_profile→UserProfile;若命名不规范,需手动指定--table - TP6 默认关闭模型严格模式,若字段不存在会静默忽略;可在模型中设
protected $strict = true提前暴露问题 - 生产环境慎用
migrate:reset或migrate:refresh,务必先备份数据
不复杂但容易忽略。关键在理解迁移管结构、模型管行为,两者分工明确,配合使用才能提升数据库层的可维护性。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











