nedwors / hopper
Hopper 允许您轻松地在本地 Laravel 数据库之间切换,同时保留数据和简化开发
Requires
- php: ^7.4|^8.0
- illuminate/support: ^7.2|^8.0
- spatie/laravel-package-tools: ^1.3
Requires (Dev)
- orchestra/testbench: ^6.0
- pestphp/pest-plugin-expectations: ^1.0
- phpunit/phpunit: ^9.0
- spatie/ray: ^1.17
README
Hopper
在本地 Laravel 开发时,轻松地在数据库之间切换。
想象一下:一位同事让你检查他们的 PR。但你正在开发新功能,你的本地数据库“刚刚好”。你已经用正确的模型和正确的数据调整好了,丢失它将是一件太过麻烦的事情...
现在想象一下:一位同事让你检查他们的 PR。你跳到他们的分支,设置你的数据库 - 迁移它,播种它,清除它, whatever - 然后审查他们的工作。然后,你回到你的功能,从你离开的地方继续 - 你的数据库仍然完好无损。
欢迎来到 Hopper。它很简单
php artisan hop awesome_new_feature
现在,你正在一个名为 awesome_new_feature 的数据库上。
使用 Git,这甚至更简单
php artisan hop
现在,你正在当前分支的数据库上!
你可以随时使用以下命令返回默认数据库
php artisan hop --d
现在,你正在使用 Laravel 设置的默认数据库上。
安装
您可以通过 composer 安装此软件包
composer require nedwors/hopper --dev
设置
Hopper 随附一个配置文件,您可以将它发布到 config/hopper.php
php artisan hop:publish
您不需要发布配置文件即可使用 Hopper,但这是推荐的。但请不要有压力。真诚地说...请参阅配置以了解您是否想为您的项目使用它。
用法
命令
配置
命令
hop
这是使用 Hopper 时的核心命令。它有三种使用方式
- 使用当前 Git 分支的数据库
- 使用特定的数据库
- 使用默认数据库
使用当前 Git 分支的数据库
这个选项是 Hopper 发挥作用的真正亮点。只需检出分支,然后切换,你就在新的数据库上了。检出之前的分支,然后切换,你就回到了起点。
要这样使用 Hopper,只需不带参数执行 hop 即可
git checkout -b updates php artisan hop
现在,当你使用应用程序时,它将连接到 updates 数据库。
您的默认 Git 分支别名指向您的默认数据库。所以,想象一下 main 是您的默认分支。当你运行这个
git checkout main php artisan hop
你不会移动到名为 main 的数据库。相反,你会移动到您的默认数据库 - 简单!
但不用担心,您不必强制使用当前的 Git 分支。您也可以在任何时候指定一个名称,或手动使用默认分支。
使用特定的数据库
要使用特定的数据库,只需传递要使用的数据库的名称
php artisan hop foobar
现在,当你使用应用程序时,它将连接到 foobar 数据库。
使用默认数据库
要使用默认数据库,向命令传递 --d 选项
php artisan hop --d
现在,您的应用程序将简单地使用 Laravel 中设置的默认数据库。
当使用默认数据库时,Hopper 会退居幕后;它不会触及您的数据库连接。这对于可能不想自己使用 Hopper 的团队成员来说很有用。他们可以放心,Hopper 不会干扰他们的设置。
创建后
首次使用数据库时,Hopper 将创建一个可用的数据库。很可能会想要迁移和设置此数据库。Hopper 提供了一种干净的方式来运行创建后步骤 - 查看如何设置这些步骤。
hop:current
查看您当前使用的数据库
php artisan hop test php artisan hop:current // Currently using test
hop:delete
删除指定的数据库
php artisan hop:delete test // Deleted test
删除数据库后,您将返回到默认数据库。
配置
如设置中所述,您不需要发布 Hopper 配置文件即可使用 Hopper。配置文件如下
'default-branch' => env('HOPPER_DEFAULT_BRANCH', 'main'), 'connections' => [ 'sqlite' => [ 'driver' => Sqlite::class, 'database-path' => 'hopper/' ], 'mysql' => [ 'driver' => MySql::class, 'database-prefix' => 'hopper_' ], ], 'boot-checks' => [ Environment::class ], 'post-creation-steps' => [ 'migrate:fresh' ]
我们鼓励您查看以下描述的所有选项,以确定是否需要发布它。
默认 Git 分支
您应该在此处定义项目中默认的 Git 分支的名称
... 'default-branch' => env('HOPPER_DEFAULT_BRANCH', 'main') ...
现在,每次您在没有参数的情况下 跳转到 此分支时,将自动使用默认数据库 - 而不是名为 main 的数据库。
您还会看到有 HOPPER_DEFAULT_BRANCH .env 变量可用 - 这意味着您可以在不发布配置文件的情况下更改此值。
连接
目前,Hopper 具有内置的 sqlite 和 mysql 数据库连接支持。Hopper 将自动使用您正在使用的任何连接。
这些和未来的驱动程序都在配置文件中公开和配置 - 这意味着即使 Hopper 最初不支持它,您也可以添加自己的驱动程序!请参阅 hopper.php 中的支持连接。
... 'connections' => [ 'sqlite' => [ 'driver' => Sqlite::class, 'database-path' => 'hopper/' ], 'mysql' => [ 'driver' => MySql::class, 'database-prefix' => 'hopper_' ], ] ...
SQLite
Hopper 将所有 Sqlite 数据库存储在您的应用程序数据库目录中的相对目录中。您可以在配置文件中配置目录的名称
... 'connections' => [ 'sqlite' => [ 'driver' => Sqlite::class, 'database-path' => 'hopper/' ], ] ...
因此,正如您所预期的,Hopper 创建的所有临时数据库都将存储在 database/hopper/ 中。例如,运行以下命令...
php artisan hop test
...将在 database/hopper/test.sqlite 创建一个 sqlite 数据库。
如果不存在,Hopper 将创建
hopper目录
在使用 Sqlite 连接时,传递给 Hopper 的所有数据库名称都将被清理。斜杠将被自动转换为短划线以用于 Sqlite 连接。因此,例如,
hop this/database将创建一个名为this-database.sqlite的数据库
在使用
sqlite连接时,将您选择的目录添加到您的.gitignore中可能值得考虑!
MySQL
Hopper 在您配置的 MySql 连接上创建所有 MySql 数据库。创建的所有数据库都将应用前缀,以便您可以轻松识别所需的内容。您可以在配置文件中配置前缀
... 'connections' => [ 'sqlite' => [ 'driver' => MySql::class, 'database-prefix' => 'hopper_' ], ] ...
例如,运行以下命令...
php artisan hop test
...将创建一个名为 hopper_test 的 MySql 数据库。
在使用 MySql 连接时,传递给 Hopper 的所有数据库名称都将被清理。短划线将被自动转换为下划线以用于 MySql 连接。因此,例如,
hop this-database将创建一个名为hopper_this_database的数据库
添加自己的
Hopper 使得添加 Laravel 支持但 Hopper 不直接支持的数据库类型的连接变得非常简单。
要添加自己的连接,创建一个实现 Connection 接口的类。您可以参考现有的连接以了解如何构建您的新实现。准备好实现它后,将其添加到连接数组中
... 'connections' => [ ... 'newconnection' => [ 'driver' => NewConnection::class ], ... ] ...
启动检查
Hopper 公开了它在连接数据库连接之前运行的检查。这样,您可以在需要的情况下更改现有检查并/或添加自己的检查。它们位于 hopper.php 配置文件中
... 'boot-checks' => [ Environment::class ] ...
包含的 Environment 检查确保应用程序环境为 local。要添加自己的检查,确保您的类实现了 BootCheck 接口或公开了一个返回 boolean 的 check() 方法。然后,将类名放入此数组中,您就完成了。
创建后步骤
配置创建新数据库后要运行的步骤非常简单。
步骤可以在 hopper.php 配置文件中找到。
... 'post-creation-steps' => [ 'migrate:fresh --seed' ] ...
该数组中包含的所有字符串都必须引用您应用程序中的 Artisan 命令。
也可以定义闭包。
... 'post-creation-steps' => [ 'migrate:fresh', fn() => app(SpecificDatabaseSeeder::class)->run() ] ...
所有步骤都是按照声明顺序运行的,所以请在任何种子之前确保
migrate您的数据库!
更新日志
有关最近更改的更多信息,请参阅 更新日志。
贡献
有关详细信息,请参阅 贡献指南。
安全
如果您发现任何与安全相关的问题,请发送电子邮件到 nedwors@gmail.com,而不是使用问题跟踪器。
鸣谢
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件。
Laravel 包模板
此包是使用 Laravel 包模板 生成的。