yuriy-sorokin/database-exporter-importer

This package is used to export/import database data to/from different formats. Currently it supports only MySQL database and JSON export/import structure.

2.0.0 2015-12-03 07:59 UTC

This package is not auto-updated.

Last update: 2024-05-11 16:50:51 UTC


README

License Latest Stable Version Total Downloads

The purpose of the package is to export/import certain data records from a database. Say, you have a bunch of related DB tables, which represent your user module. So, you want to copy a user with all the related information to another database, which already has tables created.

It is better to use a DI container to ease the usage of the package.

Exporting

<?php
$connection = new \PDO('mysql:dbname=DATABASE_NAME;host=HOST', 'USER', 'PASSWORD');

$columnsProvider = new MySqlTableColumnsProvider($connection);
$tablesProvider = new MySqlTablesProvider($columnsProvider);
$tablesProvider->setConnection($connection);

$dataProvider = new MySqlDataProvider($tablesProvider);
$dataProvider
    ->setConnection($connection)
    ->setForeignValueProvider(new TableForeignKeysValuesProvider())
    ->setPrimaryTableName('maker')
    ->setPrimaryKeyColumn('id')
    ->setPrimaryKey(1);

$exporter = new JsonDataExporter();
$data = $exporter
    ->setColumnsExporter(new JsonTableColumnsExporter())
    ->setDataRowsExporter(new JsonTableDataRowsExporter())
    ->setDataProvider($dataProvider)
    ->getData();

Finally, this $data variable contains a JSON string, which is ready to be imported. Pay attention that auto increment values of the root table are reset while importing.

Importing

<?php
$connection = new \PDO('mysql:dbname=DATABASE_NAME;host=HOST', 'USER', 'PASSWORD');

$dataParser = new JsonDataParser();
$dataParser
    ->setColumnsCreator(new JsonColumnsCreator())
    ->setDataRowsCreator(new JsonDataRowsCreator())
    ->setData($data);

$subject = new MySqlDataImporter();
$subject
    ->setConnection($connection)
    ->setDataParser($dataParser)
    ->setObserver(new AutoIncrementObserver(new ForeignKeyColumnsFinder()))
    ->setAutoIncrementFinder(new AutoIncrementTableColumnFinder())
    ->import();

Currently it supports only MySQL database and JSON export/import structure.

The test database dump is located in dump.sql.gz.