makeabledk/laravel-production-seeding

v3.0.1 2023-08-23 10:14 UTC

README

Latest Version on Packagist Build Status StyleCI

此包提供了一种方便的方法来处理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)以获取更多信息。