othyn/laravel-migrate-to-sql

此包已被废弃,不再维护。未建议替代包。

这是一个Laravel包,允许通过简单的Artisan命令轻松从应用程序迁移中生成SQL。

v2.0.0 2021-04-22 00:43 UTC

This package is auto-updated.

Last update: 2022-09-13 03:41:44 UTC


README

Tests Style Downloads Code Coverage Licence

快速将所有Laravel迁移转换为SQL文件,或输出到TTY,通过扩展默认的migrate命令列表的新便捷artisan命令来美化输出。

$ php artisan migrate:to-sql

索引

安装

通过Composer,你可以运行composer require,这将通过packagist获取此存储库的最新版本。然而,目前你首先需要添加自定义存储库来加载修正版的doctrine/sql-formatter,直到PR合并

    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/othyn/sql-formatter"
        }
    ],

如果你想让Composer在获取包时使用SSH密钥而不是oauth令牌(像我一样),可以使用no-api密钥。

    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/othyn/sql-formatter",
            "no-api": true
        }
    ],

然后你可以像往常一样运行composer require

composer require othyn/laravel-migrate-to-sql

安装 - 此包版本与PHP & Laravel版本

以下表格描述了对于给定的PHP & Laravel版本,您需要使用此包的哪个版本。

包版本 PHP版本 Laravel版本
^2.0.0 ^7.4 | ^8.0 ^7.0 | ^8.0
^1.0.0 - -

用法

以下列出了所有显式命令选项,详细说明了它们的用法

$ php artisan migrate:to-sql --help

Description:
  Generates SQL from your applications migrations

Usage:
  migrate:to-sql [options]

Options:
      --type[=TYPE]                  Which type of migration to generate the SQL for; up or down [default: "up"]
      --exportPath[=PATH]            The output path for the generated SQL file, defaults to base_path() of the application
      --ugly                         Queries should not be prettified as part of the output process
      --tty                          Output should be sent to TTY instead of written to disk, use `--no-ansi` to disable output formatting
      --connection=[=CONNECTION]     The database connection in which to generate migrations against. The default will generate all migrations, or connect it to an active database connection to only generate for migrations that have not already been run

    ... laravel default options ...

用法 - 默认行为

默认情况下,该命令将

  • up迁移生成SQL
  • 将SQL查询写入磁盘,在项目目录的根目录中,名称格式为migrations.{type}.{Y_m_d__His}.sql
  • 将SQL输出美化成结构化查询

用法 - 输出特定类型的迁移

在这里,类型指的是迁移中的updown方法 - 这里你的两个选项都是这些。

默认情况下,该命令将生成up迁移,但如果你想生成down迁移,你可以这样做

$ php artisan migrate:to-sql --type=down

这将生成down迁移到磁盘上的文件,在上述默认目录中,以下结构

-- 2014_10_12_000000_create_users_table:
DROP
    TABLE IF EXISTS `users`;

-- 2014_10_12_100000_create_password_resets_table:
DROP
    TABLE IF EXISTS `password_resets`;

-- etc...

用法 - 输出到特定的自定义导出路径

如果你希望命令导出到自定义定义的位置,则可以通过--exportPath选项传递它,例如

$ php artisan migrate:to-sql --exportPath=~/migrations.up.sql

这将生成up迁移到磁盘上的~/migrations.up.sql,以下结构

-- 2014_10_12_000000_create_users_table:
ALTER TABLE
    `users`
ADD
    UNIQUE `users_email_unique`(`email`);

-- etc...

使用方法 - 不格式化或美化查询的输出

如果您希望命令导出查询时不进行任何格式化或美化,请传递 --ugly 选项,例如

$ php artisan migrate:to-sql --ugly

这将生成到磁盘上文件的 up 迁移,在上文指定的默认目录中,以下结构

-- 2014_10_12_000000_create_users_table:
alter table `users` add unique `users_email_unique`(`email`);

-- etc...

使用方法 - 输出到 TTY 而不是磁盘

如果您希望命令导出查询而不将它们存储到磁盘,而是发送到 TTY,请传递 --tty 选项,例如(这将生成 up 迁移)

$ php artisan migrate:to-sql --tty

-- 2014_10_12_000000_create_users_table:
ALTER TABLE
    `users`
ADD
    UNIQUE `users_email_unique`(`email`);

-- etc...

使用方法 - 自定义数据库连接

如果您希望命令使用自定义数据库连接,以便它可以读取提供的数据库连接的迁移状态,并且只为尚未运行的迁移生成查询,请使用 --connection 选项传递,例如

$ php artisan migrate:to-sql --connection=sqlite

这将生成到磁盘上的 ~/migrations.up.sqlup 迁移,对于 sqlite 连接,只包含针对该连接未运行的迁移,以下结构

-- 2019_08_19_000000_create_failed_jobs_table:
CREATE TABLE "failed_jobs" (
    "id" integer NOT NULL PRIMARY KEY autoincrement,
    "uuid" varchar NOT NULL, "connection" text NOT NULL,
    "queue" text NOT NULL, "payload" text NOT NULL,
    "exception" text NOT NULL, "failed_at" datetime DEFAULT CURRENT_TIMESTAMP NOT NULL
);

-- etc...

使用方法 - 结合多个选项

选项可以组合在一起以获得更定制化的输出,例如您可以这样操作

$ php artisan migrate:to-sql --connection=sqlite --type=down --ugly --tty

-- 2019_08_19_000000_create_failed_jobs_table:
drop table if exists "failed_jobs";

-- etc...

仅生成针对 sqlite 连接的 down 迁移,仅发送到 TTY,并且不进行任何 SQL 格式化。

测试

有一个预构建的 Docker 容器,其中包含 Alpine CLI 版本的 PHP + PHPUnit + xdebug。这是用于测试项目的设置,可以通过以下方式设置

composer build

这将触发 Docker Compose 构建镜像。

所有编写的代码都有测试,可以通过以下方式运行

# Using PHPUnit, with code coverage reporting, within the Docker container
composer test

# Using PHPUnit, with code coverage reporting, within the Docker container, specifying a direct test
composer test-filtered ItGeneratesSqlFromMigrations

# Using PHPUnit, with code coverage reporting, using local phpunit and xdebug
composer test-local

# Using PHPUnit, with code coverage reporting, using local phpunit and xdebug, specifying a direct test
composer test-local-filtered ItGeneratesSqlFromMigrations

在这些测试中,有针对包的生产就绪实现的特性测试。还有每个编写的类的单元测试,以实现全面覆盖。

您也可以通过使用命令轻松在测试容器中打开 shell

composer shell

待办事项

  • 可能默认行为应该更加 Laravel 化,即它不是默认生成所有迁移,而是为当前由 .env 定义的默认数据库连接生成迁移,同时保留通过现有的 --connection 选项覆盖此选项的选项。然后添加一个新的 --all 选项来触发空连接解析以生成所有命令,这是当前默认实现。
  • 实现针对所有支持的 Laravel 版本的矩阵测试。或者,也许可以通过分支版本,以便可以适当使用与被测试的 Laravel 版本配对的 orchestra 测试框架,而不是使用通用插件。此时,可能值得将项目的 semver 版本与 Laravel 版本对齐,以便用户易于参考。
  • 目前我正在使用我自己修改的版本 doctrine/sql-formatter,并应用了一个提交的更改。如果这个更改被合并,那么 composer.json 中的 repositories 键就可以被移除,并且包可以更新到 1.1.x 版本。
  • 等待 GitHub actions 正式引入对动态代码覆盖率徽章的支持,或者实现类似这样的功能,可以从 phpunit 覆盖率报告中解析出来。目前需要手动操作。

变更日志

所有项目变更都应该在下面进行记录。版本遵循 SEMVER 标准。

版本 2.0.0

为生成部分、仅非迁移的补丁文件提供自定义数据库连接支持。

原始的 v1.1.0 补丁应该触发这个主要的 SEMVER 版本跳升,因为新的 composer 依赖版本。这导致在接受原始次要版本升级的环境中构建依赖发生了破坏性变更,为由此带来的不便表示歉意。

新增

  • 现在在文档的安装部分添加了 Packagist 链接。
  • 绑定包版本到 Laravel 版本,以确保兼容性安全。
  • 绑定包版本到 PHP 版本,以确保兼容性安全。
  • 为生成针对特定迁移补丁文件的自定义连接支持,因此您可以只将所需的 SQL 语句生成到补丁文件中。

变更

修复

  • 当测试失败时,它们可能在磁盘上留下碎片,这可能会污染其他测试。
  • 强制 composer 使用 "spatie/macroable": "^1.0",这样依赖就不会因为 composer 尝试使用不必要的新版本 "spatie/macroable": "^2.0" 而失败。

移除

版本 1.0.0

初始版本。

新增

  • 所有内容

变更

  • 所有内容

修复

  • 所有内容

移除

  • 所有内容