worksome / foggy
Foggy 是一个用于生成数据库转储的工具,其中一些数据被删除/更改。
Requires
- php: ^8.2
- ext-json: *
- ext-pdo: *
- doctrine/dbal: ^3.6
- fakerphp/faker: ^1.10
- symfony/console: ^6.4 || ^7.0
- symfony/var-dumper: ^6.4 || ^7.0
- thecodingmachine/safe: ^2.5
Requires (Dev)
- mockery/mockery: ^1.5.1
- pestphp/pest: ^2.33
- roave/security-advisories: dev-latest
- worksome/coding-style: ^2.8
README
Foggy 是一个包,它创建数据库转储,但包含清理数据。非常适合将生产数据库用于本地。
安装
通过 Composer 安装
$ composer require worksome/foggy
在 Laravel 应用程序中安装
$ composer require worksome/foggy-laravel
使用
有关与 Laravel 一起使用的信息,请参阅 Laravel Foggy 文档。
配置
配置位于 JSON 文件中,必须遵循 schema.json
文件。您可以在 jsonschemavalidator.net 或直接在 phpstorm 中验证您的配置文件。
对于最基本的配置,其中所有表都进行转储,但没有数据被清理,我们只需这样做
{ "database": { "*": { "withData": true } } }
在这里,我们指定默认情况下所有表和视图(*
)都应带有数据进行转储。一个更安全的默认设置是将 withData
设置为 false
,这样如果未指定任何特定内容,则仅导出模式定义。
定义表的规则
所有表定义都位于 JSON 对象中的 database
键内部。每个表都可以有一个规则数组。一个规则由以下内容组成
column
- 应用规则到的列。type
- 使用哪种规则类型。value
- 供给规则类型的值。times
(可选)- 允许应用此规则的次数。params
(可选)- 供给规则的静态参数。condition
(可选)- 在应用规则之前必须通过的条件。
在下面的代码片段中,我们为 users
表添加了一些规则。它展示了规则和参数的快速示例。
{ "database": { "users": { "withData": true, "rules": [ { "__comment": "Generate a fake name for all users, except if they are our own employees", "column": "name", "type": "faker", "value": "name", "condition": "!str_contains($row['email'], '@worksome.com')" }, { "__comment": "Replace all avatars with a fake image based on their user id.", "column": "avatar", "type": "php", "value": "\"https://api.adorable.io/avatars/285/{$row['id']}.png\"" }, { "__comment": "Replace all passwords with `secret`", "column": "password", "type": "replace", "value": "$2y$10$xmVOYC1DUte0oG86Zz8oeeKc3UXZNrdSKMoZGrCElup6VexStFh22" } ] } } }
规则
每个表都可以有一个规则数组。规则应用于特定列,并可以修改该列中的值。
Faker
Faker 规则是用新假值替换值。它使用底层 faker 库,因此可以使用 faker 中的所有格式化工具。
要调用简单的 faker 属性,只需指定 value
为您要使用的属性。在以下示例中,我们调用 email
faker。
{ "column": "some_column", "type": "faker", "value": "email" }
有时您可能想要使用需要参数的 faker 格式化工具。可以通过在 JSON 对象中使用 params
键来提供参数。在以下示例中,我们指定我们只想生成 male
名称。
{ "column": "some_column", "type": "faker", "value": "firstName", "params": "male" }
Replacer
Replacer 规则用给定的值替换列。这是一个简单的规则,当您只想让所有条目具有相同的值时使用。一个很好的用例是将所有密码设置为相同的值,这样当使用清理后的数据库时,您可以使用相同的密码登录所有用户。在以下示例中,我们将所有密码替换为 secret
,但它是散列版本。
{ "column": "password", "type": "replace", "value": "$2y$10$xmVOYC1DUte0oG86Zz8oeeKc3UXZNrdSKMoZGrCElup6VexStFh22" }
PHP
PHP 规则是一个基本但非常强大的规则。它允许您定义应用于列的 PHP 字符串。这个字符串有几个可以访问的变量。
value
- 这个变量将包含应应用规则的列的当前值。row
- 这个变量将包含应应用规则的行的当前值。
PHP字符串将被评估,从其中返回的值将成为该列的新值。不需要编写return
,因为语句自动被return
括起来。
{ "column": "ip", "type": "php", "value": "sha1($value)" }
条件
时间
可以通过提供一个名为times
的参数,将列限制为只应用x
次数。这将限制规则,直到达到times
为止。
SQL视图
所有视图定义都位于json对象中的database
键内。与表不同,视图没有特定的规则适用于它们。
唯一的要求是它们必须列在要包含在导入中的json对象中。通配符配置*
将包含所有视图。
{ "database": { "stock_quantity_view": {} } }