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 "nwidart/db-exporter"
* as a requirement to composer.json
:
{
...
"require": {
...
"nwidart/db-exporter": "1.0"
},
}
Update composer:
$ php composer.phar update
Add the service provider to app/config/app.php
:
'Nwidart\DbExporter\DbExportHandlerServiceProvider'
(Optional) Publish the configuration file.
php artisan config:publish nwidart/db-exporter
Use dev-master
as version requirement to be on the cutting edge
Basic usage
php artisan dbe:migrations
Specify a database
php artisan dbe:migrations otherDatabaseName
Ignoring tables
You can ignore multiple tables by seperating them with a comma.
php artisan dbe:migrations --ignore="table1,table2"
This command will export all your database table data into a seed class.
php artisan dbe:seeds
Important: This requires your database config file to be updated in app/config/database.php
.
Important: This requires your app/config/remote.php to be configured.
Important: The package configuration remote key needs to be configured to correspond to your remotes directory structure.
You can with the following command, upload migrations and / or seeds to a remote host with php artisan dbe:remote remoteName [--migrations] [--seeds]
For instance to upload the migrations to the production server:
php artisan dbe:remote production --migrations
Or upload the seeds to the production server:
php artisan dbe:remote production --seeds
Or even combine the two:
php artisan dbe:remote production --migrations --seeds
This requires your database config file to be updated. The class will export the database name from your app/config/database.php
file, based on your 'default' option.
Make a export route on your development environment
Route::get('export', function()
{
DbExportHandler::migrate();
});
Route::get('export', function()
{
DbExportHandler::migrate('otherDatabaseName');
});
This will write a seeder class with all the data of the current database.
Route::get('exportSeed', function()
{
DbExportHandler::seed();
});
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:
DbExportHandler::migrate()->seed();
Or with:
DbExportHandler::migrateAndSeed();
Important : Please note you cannot set a external seed database. If you know of a way to connect to a external DB with laravel without writing in the app/database.php file let me know.
By default the migrations table is ignored. You can add tabled to ignore with the following syntax:
DbExportHandler::ignore('tableToIgnore')->migrate();
DbExportHandler::ignore('tableToIgnore')->seed();
You can also pass an array of tables to ignore.
Export data too. It would be cool if it could also generate a seed file based of the data in the tables. This would be more usefull to run on the production server to get the seed on the development server.3/1/13Deploy the migration directly to the production server ready to be migrated. (as an option)5/1/13Make commands to do the same thing (export db to migration)4/1/13Make commands to do the same thing (export db to seed)4/1/13- Making the upload to remote available directly when generating the migrations/seeds
Credits to @michaeljcalkins for the original class on paste.laravel.com (which goal was to generate migrations from a database). Sadly I couldn't get it working as-is, so I debugged it and decided to make a package out of it, and added a couple a features of my own.