makeabledk / laravel-production-seeding
Requires
- php: ^8.1
- illuminate/support: ^9.0|^10.0
Requires (Dev)
- doctrine/dbal: ^3.6
- laravel/laravel: ^9.0|^10.0
- mockery/mockery: ^1.5
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2024-09-23 12:30:36 UTC
README
此包提供了一种方便的方法来处理Laravel中的生产级数据填充。
假设您有一些数据库表,您希望在各个环境中保持同步。例如,某些配置表需要确保有固定数量的行,但不一定是覆盖值。
Laravel Production Seeding 帮助您以优雅的方式实现这一点!
灵感来源于Edward Coleridge Smith在Laracon关于此主题的演讲:[如何在YouTube上避免数据库迁移地狱](https://www.youtube.com/watch?v=lH-FLJ363-Q)
--
Makeable 是一家位于丹麦奥尔胡斯的网站和移动应用代理机构。
安装
您可以通过Composer安装此包
composer require makeabledk/laravel-production-seeding
使用方法
像往常一样创建一个Laravel填充器。接下来实现SyncStrategy,并在run方法中将固定行应用到您的模型上。
最后,您可以在部署过程中运行填充器,以确保所有环境都实施相同的蓝图。
示例
同步配置表
使用数组蓝图同步数据库配置表。注意,我们硬编码了service-id,但允许使用不同的键。
class ConfigSeeder extends Seeder { use \Makeable\ProductionSeeding\SyncStrategy; public $rows = [ [ 'key' => 'some_service_id', 'value' => '123456' ], [ 'key' => 'some_service_public_key', ], [ 'key' => 'some_service_private_key', ], ]; public function run() { $this->apply($this->rows, Config::class, 'key'); } }
结果如下
| id | key | value |
|----|--------------------------|--------|
| 1 | some_service_id | 123456 |
| 2 | some_service_public_key | NULL |
| 3 | some_service_private_key | NULL |
按顺序同步行
有时您可能希望有一个固定的项目列表,并在数据库中应用某种顺序。
这可以通过使用AppendsSortOrder
特质轻松实现。重新排列数组项将改变数据库中的顺序值,但id保持不变。
class LanguageSeeder extends Seeder { use \Makeable\ProductionSeeding\SyncStrategy, \Makeable\ProductionSeeding\AppendsSortOrder; protected $sortKey = 'order'; // default if omitted public $rows = [ [ 'code' => 'en_GB', 'name' => 'English (GB)', ], [ 'code' => 'en_US', 'name' => 'English (US)', ], [ 'code' => 'da_DK', 'name' => 'Danish', ], ]; public function run() { $this->apply($this->rows, LanguagesModel::class, 'code'); } }
结果如下...
| id | code | name | order |
|----|-------|--------------|-------|
| 1 | en_GB | English (GB) | 1 |
| 2 | en_US | English (US) | 2 |
| 3 | da_DK | Danish | 3 |
然后您可以重新排列数组并再次运行填充器。然后您可以有...
| id | code | name | order |
|----|-------|--------------|-------|
| 1 | en_GB | English (GB) | 2 |
| 2 | en_US | English (US) | 1 |
| 3 | da_DK | Danish | 3 |
很酷,对吧?
追加配置表
使用之前的同步策略,手动添加到数据库表的任何行将在填充时被删除。
如果这不是您希望的行为,您可以使用AppendStrategy
,它只会追加新行。
假设我们之前的config
表已有一个现有行
| id | key | value |
|----|--------------------------|------------|
| 1 | github_username | makeabledk |
然后我们设置ConfigSeeder
,并使用AppendStrategy
class ConfigSeeder extends Seeder { use \Makeable\ProductionSeeding\AppendStrategy; public $rows = [ [ 'key' => 'some_service_id', 'value' => '123456' ], [ 'key' => 'some_service_public_key', ], [ 'key' => 'some_service_private_key', ], ]; public function run() { $this->apply($this->rows, Config::class, 'key'); } }
现在我们的表中会有现有的行加上3个新行
| id | key | value |
|----|--------------------------|------------|
| 1 | github_username | makeabledk |
| 2 | some_service_id | 123456 |
| 3 | some_service_public_key | NULL |
| 4 | some_service_private_key | NULL |
变更日志
请参阅[CHANGELOG](https://github.com/makeabledk/laravel-production-seeding/blob/HEAD/CHANGELOG.md)以获取更多信息。
测试
您可以通过以下命令运行测试
composer test
贡献
我们很高兴接受用于增加功能的拉取请求。请参阅[CONTRIBUTING](https://github.com/makeabledk/laravel-production-seeding/blob/HEAD/CONTRIBUTING.md)以获取详细信息。
致谢
许可证
署名-相同方式共享 4.0 国际。请参阅[许可证文件](https://github.com/makeabledk/laravel-production-seeding/blob/HEAD/LICENSE.md)以获取更多信息。