Phinx安装后报“command not found”是因为Composer仅将其可执行文件放入vendor/bin/,未自动加入系统PATH;须显式调用php vendor/bin/phinx(Linux/macOS)或php vendor\bin\phinx.bat(Windows),或配置composer.json的"bin-dir"并重装。

Phinx 不能靠 composer require 装完就跑迁移——它必须有配置文件、迁移目录、PDO 扩展三者齐备,缺一不可。
为什么 composer require robmorgan/phinx 后执行 phinx 报 command not found
Composer 只把 Phinx 的可执行脚本放进 vendor/bin/phinx,不会自动注册到系统 PATH。你得显式调用它,而不是直接敲 phinx。
- 最简方案:始终用
php vendor/bin/phinx(Linux/macOS)或php vendor\bin\phinx.bat(Windows) - 若想项目内统一调用,可在
composer.json中加配置:"config": { "bin-dir": "bin" },再运行composer install,之后就能用php bin/phinx - 别手动把
vendor/bin加进全局 PATH——多项目共存时,不同版本的phinx会互相覆盖、报错
phinx init 提示 “No migrations directory found” 怎么办
Phinx 不会自动创建 migrations/ 目录,也不接受任意位置的配置文件——它只认当前目录下的 phinx.php 或 phinx.yml,且该文件里必须声明 migrations_path。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先手动建目录:
mkdir -p migrations - 再运行初始化:
php vendor/bin/phinx init(它会生成默认phinx.php) - 检查生成的
phinx.php中'migrations' => '%%phinx_config_dir%%/migrations'是否指向你刚建的目录;如果不是,改成'migrations' => './migrations' - 注意:
./migrations是相对于phinx.php所在路径,不是你执行命令时所在的路径
phinx migrate 连不上 MySQL:Access denied 或 Unknown database
Phinx 不建库、不校验库是否存在,它只按配置连接并执行 SQL。连不上几乎全是 phinx.php 里 environments 配置的问题。
-
host别写localhost——MySQL 默认走 Unix socket,改用127.0.0.1更稳;Docker 环境则填容器名(如mysql) -
name填的是数据库名,不是用户名;如果库还没建,得先手动执行CREATE DATABASE myapp_dev CHARACTER SET utf8mb4 - 密码含
@、/等字符,必须 URL 编码,例如pass@word→pass%40word -
adapter必须写成mysql(不是pdo_mysql),且确保pdo_mysql扩展已启用(运行php -m | grep pdo确认)
如何用 Composer scripts 自动触发迁移
在 composer.json 的 scripts 段里加命令,能让 composer install 或 composer update 后自动跑迁移,但必须控制好环境和失败行为。
- 推荐写法(开发环境):
"post-install-cmd": ["php vendor/bin/phinx migrate -e development"] - 生产环境慎用,如需启用,务必加
--force并显式指定环境:"php vendor/bin/phinx migrate -e production --force" - 迁移失败时,Composer 默认中断整个流程(exit code ≠ 0),这是好事——CI/CD 中不该让半截数据库上线
- 别在 scripts 里写
source .env && php vendor/bin/phinx ...——Composer 不支持 shell 内置命令链式调用
最常被忽略的是 phinxlog 表:Phinx 用它记录每条迁移的执行状态,一旦被清空或误删,所有迁移顺序就乱了,phinx status 和 phinx rollback 都会失效。它不像 Laravel 那样靠文件哈希校验,纯靠时间戳 + 这张表双保险。

















