PHPackages                             digitalerase/deployer-extended-database - 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. digitalerase/deployer-extended-database

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

digitalerase/deployer-extended-database
=======================================

Deployer tasks to manage database synchronization between application instances.

16.1.0.5(3y ago)02.9k1MITPHP

Since Jun 16Pushed 3y agoCompare

[ Source](https://github.com/digitalerase/deployer-extended-database)[ Packagist](https://packagist.org/packages/digitalerase/deployer-extended-database)[ RSS](/packages/digitalerase-deployer-extended-database/feed)WikiDiscussions master Synced 3w ago

READMEChangelogDependencies (4)Versions (62)Used By (1)

deployer-extended-database
==========================

[](#deployer-extended-database)

[![https://scrutinizer-ci.com/g/sourcebroker/deployer-extended-database/badges/quality-score.png?b=master](https://camo.githubusercontent.com/e90cc5ca03be9611fdbb5e6d1ccbffc580c8e1c44b52e11844718917b4c28fd3/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f736f7572636562726f6b65722f6465706c6f7965722d657874656e6465642d64617461626173652f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/sourcebroker/deployer-extended-database/?branch=master)[![https://poser.pugx.org/sourcebroker/deployer-extended-database/v/stable](https://camo.githubusercontent.com/6c32b13c03aee9f39f178e669c419a64a684a1b5128ff3cf317b982ae9ef50b3/68747470733a2f2f706f7365722e707567782e6f72672f736f7572636562726f6b65722f6465706c6f7965722d657874656e6465642d64617461626173652f762f737461626c65)](https://packagist.org/packages/sourcebroker/deployer-extended-database)[![https://img.shields.io/badge/license-MIT-blue.svg?style=flat](https://camo.githubusercontent.com/f48f8d6cf609f5b181b9c3218a85175fe8a5809c7ea400347f39697a5d55065d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c75652e7376673f7374796c653d666c6174)](https://packagist.org/packages/sourcebroker/deployer-extended-database)

- [What does it do?](#what-does-it-do)
- [Installation](#installation)
- [Options](#options)
- [Options for "db\_databases"](#options-for-db-databases)
- [Examples](#examples)
    - [Config with one database and database data read from .env file](#config-with-one-database-and-database-data-read-from-env-file)
    - [Config with two databases and database data read from .env file](#config-with-two-databases-and-database-data-read-from-env-file)
    - [Config with one database and database config read from from different sources](#config-with-one-database-and-database-config-read-from-from-different-sources)
    - [Config with one database and database config read from "my framework" file](#config-with-one-database-and-database-config-read-from-my-framework-file)
    - [Config of truncate\_tables, ignore\_tables\_out, post\_sql\_in\_markers](#config-of-truncate-tables-ignore-tables-out-post-sql-in-markers)
- [Tasks](#tasks)
    - [db:backup](#db-backup)
    - [db:compress](#db-compress)
    - [db:copy](#db-copy)
    - [db:decompress](#db-decompress)
    - [db:download](#db-download)
    - [db:dumpclean](#db-dumpclean)
    - [db:export](#db-export)
    - [db:import](#db-import)
    - [db:process](#db-process)
    - [db:pull](#db-pull)
    - [db:push](#db-push)
    - [db:rmdump](#db-rmdump)
    - [db:truncate](#db-truncate)
    - [db:upload](#db-upload)
- [Changelog](#changelog)

[What does it do?](#id1)
------------------------

[](#what-does-it-do)

The package provides additional tasks for deployer (deployer.org) for synchronizing databases between instances. Most useful are two tasks:

1. task "[db:pull](#db-pull) \[source-instance\]" task which allows you to pull database from remote instance to local instance,
2. task "[db:push](#db-push) \[target-instance\]" task which allows you to push database from local to remote instance,

2. task "[db:copy](#db-copy) \[source-instance\] --options=target:\[target-instance\]" which allows to copy database between remote instances.

[Installation](#id2)
--------------------

[](#installation)

1. Install package with composer:

    ```
    composer require digitalerase/deployer-extended-database
    ```
2. Put following lines in your deploy.php:

    ```
    require_once(__DIR__ . '/vendor/digitalerase/deployer-loader/autoload.php');
    new \SourceBroker\DeployerLoader\Load([
        ['path' => 'vendor/digitalerase/deployer-instance/deployer'],
        ['path' => 'vendor/digitalerase/deployer-extended-database/deployer'],
    ]);
    ```

    IMPORTANT NOTE!

    Do not put `require('/vendor/autoload.php')` inside your deploy.php because you can have dependency problems. Use `require_once(__DIR__ . '/vendor/digitalerase/deployer-loader/autoload.php');` instead as suggested.

4. Create ".env" file in your project root (where you store deploy.php file). The .env file should be out of git because you need to store here information about instance name. Additionally put there info about database you want to synchronise. You can move the info about database data to other file later but for the tests its better to put it in .env file. Remember to protect .env file from downloading with https request if the root folder is readable from WWW server level.

    ```
    INSTANCE="development"

    DATABASE_HOST="127.0.0.1"
    DATABASE_NAME="database_name"
    DATABASE_USER="database_user"
    DATABASE_PASSWORD="password"
    ```

    The INSTANCE must correspond to `host()` name. You need to put the .env file with proper INSTANCE name and database access data on on each of you instances.
5. Define "development" host and set the "db\_databases" for it. Use following code:

    ```
    (new \SourceBroker\DeployerExtendedDatabase\Driver\EnvDriver())->getDatabaseConfig()
    ```

    which will read database data from .env file.

    ```
    host('development')
        ->set('deploy_path', getcwd())
        ->set('db_databases', [
            'database_default' => [
                (new \SourceBroker\DeployerExtendedDatabase\Driver\EnvDriver())->getDatabaseConfig()
            ]
        ])
    ```
6. Add "db\_databases" var for all other hosts. For example for production host it can be:

    ```
    host('production')
        ->setHostname('my-server.example.com')
        ->setRemoteUser('deploy')
        ->set('deploy_path', '/var/www/myapplication/')
        ->set('db_databases', [
            'database_default' => [
                (new \SourceBroker\DeployerExtendedDatabase\Driver\EnvDriver())->getDatabaseConfig()
            ]
        ])
    ```
7. Make sure all instances have the same `/vendors` folder with `deployer-extended-database` and the same `deploy.php` file. Most problems are because of differences in `deploy.php` file between instances.
8. Run `dep db:pull production` to test if all works.

[Options](#id3)
---------------

[](#options)

- **db\_databases**

    *default value:* null

    Databases to be synchronized. You can define more than one database to be synchronized. See [db\_databases](#db-databases) for options available inside db_databases. Look for [Examples](#examples) for better understanding of structure.
- **db\_storage\_path\_relative**

    *default value:* .dep/database/dumps

    Path relative to "deploy_path" where you want to store database dumps produced during database synchro commands.

[Options for "db\_databases"](#id4)
-----------------------------------

[](#options-for-db_databases)

"db\_databases" is an array of "database configurations" and "database configuration" is array of configuration parts. Configuration part can be array or string. If its string then its treated as absolute path to file which should return array of configuration. Each or array configuration parts is merged. Look for [Examples](#examples) for better understanding.

- **host**

    *default value:* null

    Database host.
- **user**

    *default value:* null

    Database user.
- **password**

    *default value:* null

    Database user password.
- **dbname**

    *default value:* null

    Database name.
- **truncate\_tables**

    *default value:* null

    Array of tables names that will be truncated with task [db:truncate](#db-truncate). Usually it should be some caching tables that will be truncated while deployment. The value is put between ^ and $ and treated as preg_match. For example you can write "cf_.*" to truncate all tables that starts with "cf_". The final preg_match checked is /^cf_.*$/i
- **ignore\_tables\_out**

    *default value:* null

    Array of tables names that will be ignored while pulling database from target instance with task [db:pull](#db-pull)The value is put between ^ and $ and treated as preg_match. For example you can write "cf_.*" to truncate all tables that starts with "cf_". The final preg_match checked is /^cf_.*$/i
- **post\_sql\_in**

    *default value:* null

    SQL that will be executed after importing database on local instance.
- **post\_sql\_in\_markers**

    *default value:* null

    SQL that will be executed after importing database on local instance. The diffrence over "post_sql_in" is that you can use some predefined markers. For now only marker is {{domainsSeparatedByComma}} which consist of all domains defined in `->set('public_urls', ['https://live.example.com']);` and separated by comma. Having such marker allows to change active domain in database after import to other instance as some frameworks keeps domain names in database.

[Examples](#id5)
----------------

[](#examples)

Below examples should illustrate how you should build your database configuration.

### [Config with one database and database data read from .env file](#id6)

[](#config-with-one-database-and-database-data-read-from-env-file)

deploy.php file:

```
set('db_default', [
   'ignore_tables_out' => [
       'caching_.*'
   ]
]);

host('production')
      ->setHostname('my-server.example.com')
      ->setRemoteUser('deploy')
      ->set('deploy_path', '/var/www/myapplication')
      ->set('db_databases',
         [
           'database_foo' => [
               get('db_default'),
               (new \SourceBroker\DeployerExtendedDatabase\Driver\EnvDriver())->getDatabaseConfig()
            ],
         ]
      );

host('development')
      ->set('deploy_path', getcwd())
      ->set('db_databases',
         [
           'database_foo' => [
               get('db_default'),
               (new \SourceBroker\DeployerExtendedDatabase\Driver\EnvDriver())->getDatabaseConfig()
            ],
         ]
      );
```

Mind that because the db\_\* settings for all hosts will be the same then you can make the 'db\_databases' setting global and put it out of host configurations. Look for below example where we simplified the config.

deploy.php file:

```
set('db_databases',
    [
        'database_foo' => [
            'ignore_tables_out' => [
               'caching_.*'
            ]
            (new \SourceBroker\DeployerExtendedDatabase\Driver\EnvDriver())->getDatabaseConfig()
         ],
    ]
);

host('production')
    ->setHostname('my-server.example.com')
    ->setRemoteUser('deploy')
    ->set('deploy_path', '/var/www/myapplication/');

host('development')
   ->set('deploy_path', getcwd());
```

The .env file should look then like:

```
INSTANCE="[instance name]"

DATABASE_HOST="127.0.0.1"
DATABASE_NAME="database_name"
DATABASE_USER="database_user"
DATABASE_PASSWORD="password"
```

### [Config with two databases and database data read from .env file](#id7)

[](#config-with-two-databases-and-database-data-read-from-env-file)

deploy.php file:

```
set('db_databases',
    [
         'database_application1' => [
            'ignore_tables_out' => [
               'caching_.*'
            ]
         (new \SourceBroker\DeployerExtendedDatabase\Driver\EnvDriver())->getDatabaseConfig('APP1_')
      ],
         'database_application2' => [
            'ignore_tables_out' => [
               'cf_.*'
             ]
         (new \SourceBroker\DeployerExtendedDatabase\Driver\EnvDriver())->getDatabaseConfig('APP2_')
      ],
    ]
);

host('production')
    ->setHostname('my-server.example.com')
    ->setRemoteUser('deploy')
    ->set('deploy_path', '/var/www/myapplication/');

host('development')
   ->set('deploy_path', getcwd());
```

The .env file should look then like:

```
INSTANCE="[instance name]"

APP1_DATABASE_HOST="127.0.0.1"
APP1_DATABASE_NAME="database_name"
APP1_DATABASE_USER="database_user"
APP1_DATABASE_PASSWORD="password"

APP2_DATABASE_HOST="127.0.0.1"
APP2_DATABASE_NAME="database_name"
APP2_DATABASE_USER="database_user"
APP2_DATABASE_PASSWORD="password"
```

### [Config with one database and database config read from from different sources](#id8)

[](#config-with-one-database-and-database-config-read-from-from-different-sources)

In example we will use:

1. array,

    ```
    'ignore_tables_out' => [
                'caching_*'
             ]
    ```
2. get() which returns array with database options, `get('db_default')`
3. direct file include which returns array with database options `__DIR__ . '/.dep/database/config/additional_db_config.php`
4. class/method which returns array with database options `(new \YourVendor\YourPackage\Driver\MyDriver())->getDatabaseConfig()`
5. closure which returns array with database options `function() { return (new \YourVendor\YourPackage\Driver\MyDriver())->getDatabaseConfig()` }

Each of this arrays are merged to build final configuration for database synchro.

deploy.php file:

```
set('db_default', [
   'post_sql_in' => 'UPDATE sys_domains SET hidden=1;'
]);

set('db_databases',
    [
        'database_foo' => [
            [
                'ignore_tables_out' => [
                   'caching_.*'
                ]
            ],
            get('db_default'),
            __DIR__ . '/databases/config/additional_db_config.php',
            (new \YourVendor\YourPackage\Driver\MyDriver())->getDatabaseConfig(),
            function() {
               return (new \YourVendor\YourPackage\Driver\MyDriver())->getDatabaseConfig();
            }
         ],
    ]
);

host('production')
    ->setHostname('my-server.example.com')
    ->setRemoteUser('deploy')
    ->set('deploy_path', '/var/www/myapplication/');

host('development')
   ->set('deploy_path', getcwd());
```

### [Config with one database and database config read from "my framework" file](#id9)

[](#config-with-one-database-and-database-config-read-from-my-framework-file)

Its advisable that you create you own special method that will return you framework database data. In below example its call to `\YourVendor\YourPackage\Driver\MyDriver()`. This way you do not need to repeat the data of database in .env file. In that case .env file should hold only INSTANCE.

```
set('db_databases',
       [
           'database_default' => [
               (new \YourVendor\YourPackage\Driver\MyDriver())->getDatabaseConfig()
           ],
       ]
   );
```

### [Config of truncate\_tables, ignore\_tables\_out, post\_sql\_in\_markers](#id10)

[](#config-of-truncate_tables-ignore_tables_out-post_sql_in_markers)

Real life example for CMS TYPO3:

```
set('db_default', [
    'truncate_tables' => [
        'cf_.*'
    ],
    'ignore_tables_out' => [
        'cf_.*',
        'cache_.*',
        'be_sessions',
        'fe_sessions',
        'sys_file_processedfile',
        'tx_devlog',
    ],
]);
```

[Tasks](#id11)
--------------

[](#tasks)

### [db:backup](#id12)

[](#dbbackup)

Backup database. In background, on target instance, two tasks are executed 'db:export' and 'db:compress'. Results are stored in "{{deploy\_path}}/.dep/databases/dumps/".

If releases folder will be detected then it adds info about release in dumpcode name like in this example: `2017-12-04_00:20:22#server=live#dbcode=database_default#dumpcode=backup_for_release_160_ec77cb6bc0e941b0ac92e2109ad7b04e#type=structure.sql.gz`

**Example**

```
dep db:backup development
dep db:backup production
dep db:backup production --options=dumpcode:mycode
```

### [db:compress](#id13)

[](#dbcompress)

Compress dumps with given dumpcode stored in folder "{{deploy\_path}}/.dep/databases/dumps/" on target instance. There is required option `--options=dumpcode:[value]` to be passed.

Look for config vars 'db\_compress\_suffix', 'db\_compress\_command', 'db\_uncompress\_command' for possible ways to overwrite standard gzip compression with your own.

**Example**

```
dep db:compress production --options=dumpcode:0772a8d396911951022db5ea385535f6
```

### [db:copy](#id14)

[](#dbcopy)

This command allows you to copy database between instances.

```
dep db:copy [source-instance] --options=target:[target-instance]
```

In the background it runs several other tasks to accomplish this. Lets assume we want to copy database from production to staging instance. We will run following command on you local instance:

```
dep db:copy production --options=target:staging
```

Here are the tasks that will be run in background:

In below description:- source instance = production
- target instance = staging
- local instance = development

1. First it runs `dep db:export production --options=dumpcode:123456` task on source instance. The dumps from export task are stored in folder "{{deploy\_path}}/.dep/databases/dumps/" on target instance.
2. Then it runs `db:download production --options=dumpcode:123456` on local instance to download dump files from live instance from folder "{{deploy\_path}}/.dep/databases/dumps/" to local instance to folder "{{deploy\_path}}/.dep/databases/dumps/".
3. Then it runs `db:process development --options=dumpcode:123456` on local instance to make some operations directly on SQL dumps files.
4. Then it runs `db:upload staging --options=dumpcode:123456` on local instance. This task takes dump files with code:123456 and send it to staging instance and store it in folder "{{deploy\_path}}/.dep/databases/dumps/".
5. Finally it runs `db:import staging --options=dumpcode:123456` on target instance. This task reads dumps with code:123456 from folder "{{deploy\_path}}/.dep/databases/dumps/" on dev instance and import it to database.
6. At the very end it removes dumps it just imported in step 5 with command `db:rmdump dev --options=dumpcode:123456`

Copy to instance defined in `instance_live_name` (default `production`) is special case. If you copy to highest instance then by default you will be asked twice if you really want to. You can disable asking by setting `db_allow_copy_live_force` to `true`. You can also forbid copy to live instance by setting `db_allow_copy_live` to `false`.

### [db:decompress](#id15)

[](#dbdecompress)

Decompress dumps with given dumpcode stored in folder "{{deploy\_path}}/.dep/databases/dumps/" on target instance. There is required option `--options=dumpcode:[value]` to be passed.

Look for config vars 'db\_compress\_suffix', 'db\_compress\_command', 'db\_uncompress\_command' for possible ways to overwrite standard gzip compression with your own.

**Example**

```
dep db:decompress live --options=dumpcode:0772a8d396911951022db5ea385535f6
```

### [db:download](#id16)

[](#dbdownload)

Download database dumps with selected dumpcode from folder "{{deploy\_path}}/.dep/databases/dumps/" on target instance and store it in folder "{{deploy\_path}}/.dep/databases/dumps/" on local instance. There is required option `--options=dumpcode:[value]` to be passed.

**Example**

```
dep db:download production --options=dumpcode:0772a8d396911951022db5ea385535f6
```

### [db:dumpclean](#id17)

[](#dbdumpclean)

Clean database dump storage on target instance. By default it removes all dumps except last five but you can set your values and also change the values depending on instance.

**Example**

```
set('db_dumpclean_keep', 10); // keep last 10 dumps for all instances

set('db_dumpclean_keep', [
   'live' => 10 // keep last 10 dumps for live instance dumps
   'dev' => 5   // keep last 5 dumps for dev instance dumps
   '*' => 2     // keep last 5 dumps for all other instances dumps
]);

dep db:dumpclean live
```

### [db:export](#id18)

[](#dbexport)

Dump database to folder on local instance located by default in "{{deploy\_path}}/.dep/databases/dumps/". Dumps will be stored in two separate files. One with tables structure. The second with data only. There is option `--options=dumpcode:[value]` that can be passed. If there is no dumpcode then its created and returned as json structure.

**Example**

Example task call:

```
dep db:export production
```

Example output files located in folder {{deploy\_path}}/.dep/databases/dumps/:

```
2017-02-26_14:56:08#server=live#dbcode=database_default#type=data#dumpcode=362d7ca0ff065f489c9b79d0a73720f5.sql
2017-02-26_14:56:08#server=live#dbcode=database_default#type=structure#dumpcode=362d7ca0ff065f489c9b79d0a73720f5.sql
```

Example task call with own dumpcode=

```
dep db:export production --options=dumpcode:mycode
```

Example output files:

```
2017-02-26_14:56:08#server=live#dbcode=database_default#type=data#dumpcode=mycode.sql
2017-02-26_14:56:08#server=live#dbcode=database_default#type=structure#dumpcode=mycode.sql
```

### [db:import](#id19)

[](#dbimport)

Import database dump files from local instance folder "{{deploy\_path}}/.dep/databases/dumps/" to local database(s). There is required option `--options=dumpcode:[value]` to be passed.

**Example**

```
dep db:import staging --options=dumpcode:0772a8d396911951022db5ea385535f66
```

### [db:process](#id20)

[](#dbprocess)

This command will run some defined commands on pure sql file as its sometimes needed to remove or replace some strings directly on sql file before importing. There is required option `--options=dumpcode:[value]` to be passed.

**Example**

```
dep db:process staging --options=dumpcode:0772a8d396911951022db5ea385535f66
```

### [db:pull](#id21)

[](#dbpull)

This command allows you to pull database from target instance to local instance. In the background it runs several other tasks to accomplish this.

Here is the list of tasks that will be done when you execute "db:pull":

1. First it runs [db:export](#db-export) task on target instance and get the "dumpcode" as return to use it in next commands.
2. Then it runs [db:download](#db-download) on local instance (with "dumpcode" value from first task).
3. Then it runs [db:process](#db-process) on local instance (with "dumpcode" value from first task).
4. Then it runs [db:import](#db-import) on local instance (with "dumpcode" value from first task).

Pull to instance defined in `instance_live_name` (default `production`) is special case. If you pull to highest instance then by default you will be asked twice if you really want to. You can disable asking by setting `db_allow_pull_live_force` to `true`. You can also forbid pull to live instance by setting `db_allow_pull_live` to `false`.

**Example**

```
dep db:pull production
```

### [db:push](#id22)

[](#dbpush)

This command allows you to push database from local instance to remote instance. In the background it runs several other tasks to accomplish this.

Here is the list of tasks that will be done when you execute "db:push":

1. First it runs [db:export](#db-export) task on local instance and get the "dumpcode" as return to use it in next commands.
2. Then it runs [db:upload](#db-upload) on local instance with remote as argument (with "dumpcode" value from first task).
3. Then it runs [db:process](#db-process) on remote instance (with "dumpcode" value from first task).
4. Then it runs [db:import](#db-import) on remote instance (with "dumpcode" value from first task).

Push to instance defined in `instance_live_name` (default `production`) is special case. If you push to highest instance then by default you will be asked twice if you really want to. You can disable asking by setting `db_allow_push_live_force` to `true`. You can also forbid push to live instance by setting `db_allow_push_live` to `false`.

**Example**

```
dep db:push production
```

### [db:rmdump](#id23)

[](#dbrmdump)

This command will remove all dumps with given dumpcode (compressed and uncompressed). There is required option `--options=dumpcode:[value]` to be passed.

**Example**

```
dep db:rmdump production --options=dumpcode:0772a8d396911951022db5ea385535f66
```

### [db:truncate](#id24)

[](#dbtruncate)

This command allows you to truncate database tables defined in database config var "truncate\_tables". No dumpcode is needed because it operates directly on database.

**Example**Truncate local instance databases tables.

```
dep db:truncate
```

Truncate live instance databases tables.

```
dep db:truncate production
```

### [db:upload](#id25)

[](#dbupload)

Upload database dumps with selected dumpcode from folder "{{deploy\_path}}/.dep/databases/dumps/" on local instance and store it in folder "{{deploy\_path}}/.dep/databases/dumps/" on target instance. There is required option `--options=dumpcode:[value]` to be passed.

**Example**

```
dep db:upload production --options=dumpcode:0772a8d396911951022db5ea385535f6
```

[Changelog](#id26)
------------------

[](#changelog)

See

###  Health Score

36

—

LowBetter than 79% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity21

Limited adoption so far

Community13

Small or concentrated contributor base

Maturity77

Established project with proven stability

 Bus Factor1

Top contributor holds 95.5% of commits — single point of failure

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 ~35 days

Recently: every ~15 days

Total

61

Last Release

1168d ago

Major Versions

11.0.2 → 12.0.02020-09-01

12.2.1 → 13.0.02020-10-16

13.0.2 → 14.0.02022-10-30

14.0.0 → 15.0.02022-12-11

15.0.0 → 16.0.02022-12-28

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/9947815?v=4)[Per Forsberg](/maintainers/perforsberg77)[@perforsberg77](https://github.com/perforsberg77)

---

Top Contributors

[![kszymukowicz](https://avatars.githubusercontent.com/u/1453553?v=4)](https://github.com/kszymukowicz "kszymukowicz (236 commits)")[![blankse](https://avatars.githubusercontent.com/u/998558?v=4)](https://github.com/blankse "blankse (6 commits)")[![mjankiewicz](https://avatars.githubusercontent.com/u/1465174?v=4)](https://github.com/mjankiewicz "mjankiewicz (2 commits)")[![perforsberg77](https://avatars.githubusercontent.com/u/9947815?v=4)](https://github.com/perforsberg77 "perforsberg77 (2 commits)")[![mavolkmer](https://avatars.githubusercontent.com/u/9119282?v=4)](https://github.com/mavolkmer "mavolkmer (1 commits)")

---

Tags

databasesynchronizationdeployerdeployer.org

### Embed Badge

![Health badge](/badges/digitalerase-deployer-extended-database/health.svg)

```
[![Health](https://phpackages.com/badges/digitalerase-deployer-extended-database/health.svg)](https://phpackages.com/packages/digitalerase-deployer-extended-database)
```

###  Alternatives

[doctrine/dbal

Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.

9.7k595.8M6.5k](/packages/doctrine-dbal)[doctrine/doctrine-bundle

Symfony DoctrineBundle

4.8k249.9M3.9k](/packages/doctrine-doctrine-bundle)[doctrine/migrations

PHP Doctrine Migrations project offer additional functionality on top of the database abstraction layer (DBAL) for versioning your database schema and easily deploying changes to it. It is a very easy to use and a powerful tool.

4.8k212.9M507](/packages/doctrine-migrations)[doctrine/data-fixtures

Data Fixtures for all Doctrine Object Managers

2.8k141.0M561](/packages/doctrine-data-fixtures)[spatie/laravel-backup

A Laravel package to backup your application

6.0k23.4M229](/packages/spatie-laravel-backup)[sourcebroker/deployer-extended-database

Deployer tasks to manage database synchronization between application instances.

42313.6k7](/packages/sourcebroker-deployer-extended-database)

PHPackages © 2026

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