Export your database quickly and easily as a Laravel Migration and all the data as a Seeder class. This can be done via artisan commands or a controller action.
Please note that I've only tested this package on a MySQL database. It has been confirmed it does not work with Postgres
Add "elimuswift/db-exporter"
* as a requirement to composer.json
:
{
"require": {
"elimuswift/db-exporter": "*"
},
}
Update composer:
php composer.phar update
For laravel <=5.4
, Add the service provider to config/app.php
:
Elimuswift\DbExporter\DbExportHandlerServiceProvider::class
(Optional) Publish the configuration file.
php artisan vendor:publish --provider="Elimuswift\DbExporter\DbExportHandlerServiceProvider"
After publishing the config file make sure you change storage location for migrations and seeds.
Use dev-master
as version requirement to be on the cutting edge
Basic usage
php artisan db-exporter:migrations
Specify a database
php artisan db-exporter:migrations otherDatabaseName
Ignoring tables
You can ignore multiple tables by seperating them with a comma.
php artisan db-exporter:migrations --ignore="table1,table2"
This command will export all your database table data into a seed class.
php artisan db-exporter:seeds
Important: This requires your database config file to be updated in config/database.php
**
Important: The package backup destinations paths should match your desired disk location
You can backup migrations and / or seeds to a storage disk that you application supports.
php artisan db-exporter:backup --migrations
Or upload the seeds to the production server:
php artisan db-exporter:backup --seeds
Or even combine the two:
php artisan db-exporter:backup --migrations --seeds
This feature uses Laravel's filesystem.
You must configure your storage and then specify the disk name in the config file. The default disk is local
This class will export the database name from your config/database.php
file, based on your 'default' option.
DbExporter::migrate();
DbExporter::migrate('otherDatabaseName');
This will write a seeder class with all the data of the current database.
DbExporter::seed();
Just pass the nameof the database to be seeded.
DbExporter::seed('myOtherDB');
Next all you have to do is add the call method on the base seed class:
$this->call('nameOfYourSeedClass');
Now you can run from the commmand line:
php artisan db:seed
, or, without having to add the call method: php artisan db:seed --class=nameOfYourSeedClass
You can also combine the generation of the migrations & the seed:
DbExporter::migrate()->seed();
Or with:
DbExporter::migrateAndSeed();
By default the migrations table is ignored. You can add tabled to ignore with the following syntax:
DbExporter::ignore('tableToIgnore')->migrateAndSeed();
DbExporter::ignore('table1','table2','table3')->migrateAndSeed();
You can also pass an array of tables to ignore.
If you want to always ignore certain tables you can do it on the config file
return [
'seeds' => [
'ignore_tables' => [
'table_to_ignore1',
'table_to_ignore2'
]
]
];
With this configuration every time when the command php artisan db-exporter:seeds
is executed will ignore the tables on the array
In the other hand, If you want to use always certain tables you can do it on the config file
return [
'seeds' => [
'use_tables' => [
'table_to_ignore1',
'table_to_ignore2'
]
]
];
With this configuration every time when the command php artisan db-exporter:seeds
is executed will only be executed to the tables on the array
Credits to @nWidart the original creator of the package DbExporter. I couldn't get it working as-is, so I decided to rewrite the package to fit the latest versions of laravel, and added a couple a features of my own.