跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

Webman数据库迁移工具使用_Webman版本控制数据库表结构【教学】

Webman本身不支持数据库迁移,需集成Phinx并配置插件或手动注册命令;直接运行vendor/bin/phinx报“No config file found”是因为工作目录错误、未加载Webman配置且database.php结构不兼容Phinx。 Webman 本身不带数据库迁移能力,必须靠 Phinx + 插件或手动集成才能用;直接
composer require robmorgan/phinx
后运行
vendor/bin/phinx
会报
No config file found
—— 根本原因是工作目录不对、配置没加载、Webman 的
config/database.php
结构也不被 Phinx 原生识别。 为什么 php webman migrate 命令不存在 Webman 没有内置 migration 命令入口,
x2nx/webman-migrate
插件只是封装了 Phinx,但前提是它得能正确加载配置。常见失败点: 插件未启用:检查
config/plugin/x2nx/webman-migrate/app.php
中
'enable' => true
是否存在 Phinx 配置文件缺失或路径错误:插件默认只认项目根目录下的
phinx.yml
,若你用的是
phinx.php
,必须在插件配置里显式指定路径 命令未注册:插件只提供
php webman migrate
这类命令,但 Webman 的 console 系统需通过
Commands::add()
才能识别,否则命令根本不会出现在
php webman list
里 如何让 phinx.php 正确读取 Webman 的 database 配置 不能硬编码数据库参数,必须复用
config/database.php
里的多环境配置(尤其是
.env
变量)。关键步骤是手动映射字段: 在项目根目录创建
phinx.php
,开头
require vendor/autoload.php
和
require config/database.php
从
$config['connections']['mysql']
(或你实际用的连接名)中提取字段,转成 Phinx 要求的
environments.dev
结构 注意字段名差异:
'host'
→
'host'
,
'database'
→
'name'
,
'username'
→
'user'
,
'password'
→
'pass'
,
'port'
→
'port'
Docker 环境下
host
必须填容器名(如
mysql
),不能写
localhost
迁移文件命名和编写要注意什么 Phinx 对文件名敏感,一旦提交到 Git 就禁止修改内容,否则不同环境执行顺序错乱或报错: Midjourney AI 提示词工具 PHP中文网提供Midjourney AI 提示词在线生成工具,专为解决 AI 绘画“词穷”痛点而生,用户只需输入“一只猫”等简单想法,工具便能利用 AI 智能扩展出包含艺术风格、光影构图、镜头参数及负面提示词的专业级英文 Prompt。它完美兼容 Midjourney V8.1 及 Niji 模型,支持一键复制与参数自动优化,大幅降低创作门槛,是提升出图质量与效率的必备辅助神器。 下载 命名格式必须为
YYYYMMDDHHIISS_describe_action_table.php
,例如
20260524102345_create_user_table.php
up()
方法写正向变更(如
$table->addColumn('email', 'string')
),
down()
写逆向操作(如
$table->removeColumn('email')
) 不要在迁移里调用业务模型或服务类 —— 迁移应只操作结构,不依赖运行时上下文 新增字段带默认值时,MySQL 5.7+ 要求显式加
->setDefault('')->nullable(false)
,否则可能因 strict mode 报错 执行迁移时最常见的卡点 命令看似跑通,但表没建、日志没记录、回滚失效,往往卡在这些细节上:
php webman migrate
执行后无输出?检查
phinx.php
里
'migrations'
路径是否指向
database/migrations
,且该目录存在并可写 提示
SQLSTATE[HY000] [2002] Connection refused
?不是数据库挂了,而是
phinx.php
里
host
写成了
localhost
,而 Webman 容器内无法解析 执行
php webman migrate:rollback
失败?确认
down()
方法逻辑完整,比如删表操作不能只写
$this->dropTable('user')
,还要确保表存在(加
if ($this->hasTable('user'))
) 多个数据库连接怎么选?Phinx 默认只用
environments.dev
,如需切换,得在
phinx.php
里定义
'production'
环境,并用
php webman migrate -e production
显式指定 最易被忽略的一点:Phinx 的
phinxlog
表(记录已执行迁移)默认建在
dev
环境库中。如果你的生产库和开发库完全隔离,就得在
phinx.php
里为
production
单独配
'migration_table' => 'phinxlog_prod'
,否则上线后迁移状态会混乱。

相关文章