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. [Database &amp; ORM](/categories/database)
4. /
5. maple-syrup-group/dbsampler

ActiveProject[Database &amp; ORM](/categories/database)

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 today

READMEChangelog (6)Dependencies (8)Versions (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

36

—

LowBetter than 79% of packages

Maintenance13

Infrequent updates — may be unmaintained

Popularity28

Limited adoption so far

Community20

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

1975d ago

Major Versions

0.7.0 → 1.0.02021-02-01

### Community

Maintainers

![](https://www.gravatar.com/avatar/9025c7b030862eabb8877bfe173b2358db04463e16d50703c6d9287e55fe5804?d=identicon)[dragoonis](/maintainers/dragoonis)

![](https://avatars.githubusercontent.com/u/16324986?v=4)[msmos](/maintainers/msmos)[@msmos](https://github.com/msmos)

---

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)")

###  Code Quality

TestsPHPUnit

Code StylePHP CS Fixer

### 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)
```

###  Alternatives

[bolt/core

🧿 Bolt Core

582145.4k57](/packages/bolt-core)[elgg/elgg

Elgg is an award-winning social networking engine, delivering the building blocks that enable businesses, schools, universities and associations to create their own fully-featured social networks and applications.

1.7k16.2k49](/packages/elgg-elgg)[flow-php/flow

PHP ETL - Extract Transform Load - Data processing framework

84735.1k](/packages/flow-php-flow)[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

585.4M524](/packages/shopware-core)[shopware/elasticsearch

Elasticsearch for Shopware

143.8M15](/packages/shopware-elasticsearch)[mahocommerce/maho

Free and open source ecommerce platform, created in 2024 on the M1 platform, PHP 8.3+

1384.8k32](/packages/mahocommerce-maho)

PHPackages © 2026

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