worksome/foggy

Foggy 是一个用于生成数据库转储的工具,其中一些数据被删除/更改。

v0.6.1 2024-02-08 09:03 UTC

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": {}
  }
}