othyn / laravel-migrate-to-sql
这是一个Laravel包,允许通过简单的Artisan命令轻松从应用程序迁移中生成SQL。
Requires
- php: ^7.4|^8.0
- doctrine/sql-formatter: dev-temp-until-pr-merged
- illuminate/support: ^7.0|^8.0
- spatie/macroable: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.18
- orchestra/testbench: ^6.0
- phpunit/phpunit: ^9.5
- spatie/test-time: ^1.2
This package is auto-updated.
Last update: 2022-09-13 03:41:44 UTC
README
快速将所有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输出美化成结构化查询
用法 - 输出特定类型的迁移
在这里,类型指的是迁移中的up
和down
方法 - 这里你的两个选项都是这些。
默认情况下,该命令将生成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.sql
的 up
迁移,对于 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
初始版本。
新增
- 所有内容
变更
- 所有内容
修复
- 所有内容
移除
- 所有内容