Search by

laraveladmin / phinx-migrations-generator

laraveladmin

Dev-only wrapper around odan/phinx-migrations-generator with an isolated runtime, avoiding think-migration's bundled Phinx fork.

Package info

gitee.com/zsping1989/phinx-migrations-generator.git

pkg:composer/laraveladmin/phinx-migrations-generator

Statistics

Installs: 2

Dependents: 0

Suggesters: 0

v1.0.0 2026-10-18 04:42 UTC

This package is not auto-updated.

Last update: 2026-10-19 03:29:36 UTC


README

Dev-only wrapper around odan/phinx-migrations-generator for ThinkPHP projects using topthink/think-migration.

为什么需要这个包

topthink/think-migration 自带一份改造过的 Phinx,并把它挂在 Phinx\ 命名空间下; odan/phinx-migrations-generator 依赖上游 robmorgan/phinx,同样使用 Phinx\。

把两者装进同一个 Composer autoloader 时,Phinx\Migration\Manager 只会解析到其中一个: Generator 传 Symfony Input,却命中 think-migration 的 think\console\Input 版本,直接报:

TypeError: Phinx\Migration\Manager::__construct(): Argument #2 ($input)
must be of type think\console\Input, Symfony\Component\Console\Input\ArgvInput given

所以本包不把 odan/Phinx 放进主工程 vendor。它只提供一个薄命令:

  1. 在应用 runtime/phinx-generator 下创建独立 Composer 工程;
  2. 首次运行时安装 odan/phinx-migrations-generator 到该目录的独立 vendor;
  3. 用子进程执行隔离的 phinx-migrations,主工程 autoloader 完全不参与。

安装

composer require --dev laraveladmin/phinx-migrations-generator

在应用根目录的 composer.json 注册命令(可选但推荐):

{
  "scripts": {
    "migration:generate": "@php vendor/bin/phinx-migrations generate"
  }
}

生产部署使用 composer install --no-dev 时,本包不会被安装。

使用

# 从现有数据库生成迁移(首次会安装隔离依赖)
composer migration:generate -- --name=AddFooTable

# 等价于直接调用 bin
vendor/bin/phinx-migrations generate --name=AddFooTable

# 使用自定义 Phinx 配置
vendor/bin/phinx-migrations generate -c /path/to/phinx.php -p php

# 只生成到临时目录(不影响 database/migrations)
vendor/bin/phinx-migrations generate --path=/tmp/migrations --name=Smoke

默认行为:

  • 读取应用根目录的 composer.json / think 判断应用根;
  • 读取 server/.env 或工作区根 .env 的 DB_*;
  • 生成 runtime/phinx-generator/phinx.php(含 DB 凭证,权限 0600);
  • migration 输出到 server/database/migrations;
  • schema.php 留在 runtime/phinx-generator,不会进入仓库。

首次运行会自动执行:

cd <app>/runtime/phinx-generator
composer install --no-interaction --no-progress

可配置环境变量

变量作用
ZHIRUIHOU_APP_ROOT显式指定 ThinkPHP 应用根(含 composer.json + think)
ZHIRUIHOU_PHINX_RUNTIME显式指定隔离运行时目录(默认 <app>/runtime/phinx-generator)
COMPOSER_BINARY显式指定 composer 可执行文件

限制

  • 仅用于开发环境;不要把生成器加入生产依赖;
  • 首次运行需要网络安装 odan/phinx-migrations-generator;
  • 隔离运行时目录不纳入版本控制;
  • 生成迁移后请人工审查:生成器是 schema diff,不保证业务语义/数据迁移正确。

License

MIT