PHPackages                             maple-syrup-group/dbsampler - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. maple-syrup-group/dbsampler

ActiveProject

maple-syrup-group/dbsampler
===========================

Rule-based generation of fixture databases by sampling operational databases

1.0.0(5y ago)332.0k10[1 issues](https://github.com/MapleSyrupGroup/dbsampler/issues)MITPHP

Since Mar 1Pushed 3y ago4 watchersCompare

[ Source](https://github.com/MapleSyrupGroup/dbsampler)[ Packagist](https://packagist.org/packages/maple-syrup-group/dbsampler)[ RSS](/packages/maple-syrup-group-dbsampler/feed)WikiDiscussions master Synced 2mo ago

READMEChangelog (6)DependenciesVersions (12)Used By (0)

maple-syrup-group/dbsampler
===========================

[](#maple-syrup-groupdbsampler)

[![Build Status](https://camo.githubusercontent.com/9c0578e574d21248109ca24fdd559a9325d17b6ca04129a11479b8ca1f75c2e9/68747470733a2f2f7472617669732d63692e6f72672f4d61706c65537972757047726f75702f646273616d706c65722e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/MapleSyrupGroup/dbsampler)

A general tool for extracting and cleaning selected tables from a database for use as fixtures. Copies a subset of tables from one database to another under the control of a json configuration file. The latter database can then be dumped to SQL for use as a fixture file.

Usage
-----

[](#usage)

- Create the target database(s) you wish to fill. The tool will only output to existing databases. The content of the Destination Databases **will** be trashed.
- Create `config/credentials.json` with the DB server configuration.
- Create `config/*.db.json` files to define mappings for each required database
- Run `bin/dbsampler.php`

Configuration formats
---------------------

[](#configuration-formats)

All config files live in the `config` subdirectory. Files *cannot* contain comments as the JSON format does not support this, but as a convention, fields called "comment" will be ignored where possible.

#### credentials.json

[](#credentialsjson)

`"driver": "pdo_mysql"` is currently assumed but this may change in future.

##### MySQL

[](#mysql)

See `config/credentials.dist.json`:

```
{
  "driver": "pdo_mysql",
  "dbUser": "root",
  "dbPassword": "SOMEPASSWORD",
  "dbHost": "127.0.0.1"
}

```

If you need different source and dest servers, this becomes:

```
{
  "source": {
    "driver": "pdo_mysql",
    "dbUser": "root",
    "dbPassword": "SOMEPASSWORD",
    "dbHost": "sourceDB.example.com"
  },

  "dest" : {
    "driver": "pdo_mysql",
    "dbUser": "root",
    "dbPassword": "SOMEPASSWORD",
    "dbHost": "127.0.0.1"
  }
}

```

If you need to prepare the connections, add an initialSql stanza:

```
{
  "source": {
    "driver": "pdo_mysql",
    "dbUser": "root",
    "dbPassword": "SOMEPASSWORD",
    "dbHost": "sourceDB.example.com",
    "initialSql": [
      "SET NAMES UTF8"
    ]
  },
  "dest": {
    "driver": "pdo_mysql",
    "dbUser": "root",
    "dbPassword": "SOMEPASSWORD",
    "dbHost": "127.0.0.1",
    "initialSql": [
      "SET NAMES UTF8",
      "SET foreign_key_checks = 0"
    ]
  }
}

```

##### Sqlite

[](#sqlite)

See `config/credentials.dist.json`:

```
{
    "driver": "pdo_sqlite",
    "directory": "..\/path\/to\/sqlite-dbs"
}

```

Paths are assumed to be relative to the config file unless they start with a '/'. Sqlite databases to be migrated are assumed to be `*.sqlite` files in this directory

#### *dbname*.db.json

[](#dbnamedbjson)

```
{
  "name": "small-sqlite-test",          # Configuration name
  "sourceDb": "small-source",           # Name of the source DB
  "destDb": "small-dest",               # Name of the destination DB. This DB will get trashed
  "tables": {                           # A set of tables to be copied over. Each table is defined as "table": config
                                        # Every config stanza requires a sampler field. For now, look these up in
                                        # \Quidco\DbSampler\MigrationConfigProcessor::$samplerMap
                                        # All other fields depend on the specific sampler being used; these should
                                        # all be documented in their own class files in src/Sample
    "fruits": {
      "sampler": "matched",
      "constraints": {
        "name": [
          "apple",
          "pear"
        ]
      },
      "remember": {
        "id": "fruit_ids"               # Cross-referencing is supported by "remember" stanzas
                                        # These take the field name of which the values are to be remembered
                                        # matched to a variable name in which the values will be stored
                                        # Note: Variable declarations do not include a '$' symbol
                                        # References MUST be 'remember'ed before being used, there is no
      }                                 # dependency resolution here, so order your config appropriately
    },
    "vegetables": {
      "sampler": "NewestById",
      "idField": "id",
      "quantity": 2
    },
    "fruit_x_basket": {
      "sampler": "matched",
      "constraints": {
        "fruit_id": "$fruit_ids"        # Remembered variables, with $ sign, can be used as cross-references
                                        # This will expand to all ids of the fruits table matched above
      },
      "where" : [
        "basket_id > 1"                 # The matched sampler can also accept a list of arbitrary WHERE clauses
      ],
      "remember": {
        "basket_id": "basket_ids"
      }
    },
    "baskets": {
      "sampler": "cleanMatched",        # some samplers support field cleaners that are defined in
                                        # \Quidco\DbSampler\FieldCleanerProvider::getCleanerByName
                                        # They modify or replace the content of the field that they are keyed to
      "constraints": {
        "id": "$basket_ids"
      },
      "cleanFields": {
        "name": "fakefullname"
      }
    }
  },
  "views": [                            # view support is experimental
    "some_view"                         # views are specified as name only but format may change
  ]                                     # The destination's CURRENT_USER() is used as the DEFINER for MySQL DBs
}

```

##### "Faker" cleaners

[](#faker-cleaners)

Any 'faker' ([fzaninotto/faker](https://github.com/fzaninotto/Faker)) generator that does not require parameters can be used directly in the cleanFields stanza by using `"name": "faker:GENERATOR"`, eg:

```
 "cleanFields": {
   "ip": "faker:ipv4"
 },

```

Extending the project
---------------------

[](#extending-the-project)

The tool is designed to be extended primarily by adding custom Samplers (which must implement `\Quidco\DbSampler\SamplerInterface`) and cleaners (documented in `\Quidco\DbSampler\FieldCleanerProvider::getCleanerByName`).

It is likely that a mechanism to register external cleaners and samplers will be provided.

Currently, only mysql and sqlite databases are supported, but this could also be extended.

###  Health Score

35

—

LowBetter than 79% of packages

Maintenance13

Infrequent updates — may be unmaintained

Popularity28

Limited adoption so far

Community16

Small or concentrated contributor base

Maturity70

Established project with proven stability

 Bus Factor2

2 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~143 days

Recently: every ~216 days

Total

11

Last Release

1926d ago

Major Versions

0.7.0 → 1.0.02021-02-01

### Community

---

Top Contributors

[![rgeorge-msm](https://avatars.githubusercontent.com/u/26119910?v=4)](https://github.com/rgeorge-msm "rgeorge-msm (29 commits)")[![michaeljoseph](https://avatars.githubusercontent.com/u/169933?v=4)](https://github.com/michaeljoseph "michaeljoseph (17 commits)")[![martinmca](https://avatars.githubusercontent.com/u/44459726?v=4)](https://github.com/martinmca "martinmca (15 commits)")[![nealio82](https://avatars.githubusercontent.com/u/1086726?v=4)](https://github.com/nealio82 "nealio82 (15 commits)")[![nayef-quidco](https://avatars.githubusercontent.com/u/26119886?v=4)](https://github.com/nayef-quidco "nayef-quidco (1 commits)")[![parsingphase](https://avatars.githubusercontent.com/u/867994?v=4)](https://github.com/parsingphase "parsingphase (1 commits)")

### Embed Badge

![Health badge](/badges/maple-syrup-group-dbsampler/health.svg)

```
[![Health](https://phpackages.com/badges/maple-syrup-group-dbsampler/health.svg)](https://phpackages.com/packages/maple-syrup-group-dbsampler)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
