This is database table structure and data exporter to migration and seed files for Laravel 5
- create migration files from database table structure
- handle foreign keys (watch for recursive foreign keys)
- create model files from database table structure (even foreign keys)
- organize generated models depending on database tabla name to individual namespace and directory structure via regular expressions
- create seed files from database table content
To composer.json
file add following lines:
// to "require" object
"vi-kon/laravel-db-exporter": "~1.*"
Or run following command in project root:
composer require vi-kon/laravel-db-exporter
In Laravel 5 project add following lines to app.php
:
// to providers array
'ViKon\DbExporter\DbExporterServiceProvider',
Installing configuration and migration files simple run:
php artisan vendor:publish --provider="ViKon\DbExporter\DbExporterServiceProvider"
Configuration files help set up default values for commands.
return [
/*
| --------------------------------------------------------------------------
| Default connection name
| --------------------------------------------------------------------------
| Database connection name. Valid connection names are defined in
| database.php. If value is null default connection is used.
|
*/
'connection' => null,
/*
| --------------------------------------------------------------------------
| Default table prefix
| --------------------------------------------------------------------------
| This table prefix is used in generated migration files or in generated
| models.
|
*/
'prefix' => '',
/*
| --------------------------------------------------------------------------
| Default selected tables
| --------------------------------------------------------------------------
| Select specified database tables only. No work with ignore option
| together. In commands with --select option can add another tables.
|
*/
'select' => [],
/*
| --------------------------------------------------------------------------
| Default ignored tables
| --------------------------------------------------------------------------
| Ignore specified database tables. No work with select option together.
| In commands with --ignore option can add another tables.
|
*/
'ignore' => [
'migrations',
],
/*
| --------------------------------------------------------------------------
| Model options
| --------------------------------------------------------------------------
*/
'model' => [
/*
| --------------------------------------------------------------------------
| Default namespace
| --------------------------------------------------------------------------
| Namespace for generated models. In command with --namespace option can
| overwrite.
|
*/
'namespace' => 'App\Models',
/*
| --------------------------------------------------------------------------
| Default path
| --------------------------------------------------------------------------
| Generated models destination path. Is relative to projects base path. In
| command with --path option can overwrite.
|
*/
'path' => app_path('Models'),
/*
| --------------------------------------------------------------------------
| Custom map
| --------------------------------------------------------------------------
| Map is useful for organizing generated models to multiple namespaces and
| directories. Each map entry is array with following associative keys:
|
| * tablePattern - regex pattern for selecting tables by name
| * namespace - generated models namespace from selected tables
| * path - generated models destination path from selected tables
| * className - array containing pattern and replacement for preg_match
| to generate models class name from table name. If value
| is null original table name is used. The result is camel
| cased. The subject table name is snake cased
|
*/
'map' => [
// [
// 'tablePattern' => '.*',
// 'namespace' => 'App\Models',
// 'path' => 'app/Models',
// 'className' => [
// 'pattern' => '',
// 'replacement' => '',
// ],
// ],
],
],
/*
| --------------------------------------------------------------------------
| Migration options
| --------------------------------------------------------------------------
*/
'migration' => [
/*
| --------------------------------------------------------------------------
| Default path
| --------------------------------------------------------------------------
| Generated migration destination path. Is relative to projects base path.
| In command with --path option can overwrite.
|
*/
'path' => base_path('database/migrations'),
],
/*
| --------------------------------------------------------------------------
| Seed options
| --------------------------------------------------------------------------
*/
'seed' => [
/*
| --------------------------------------------------------------------------
| Default path
| --------------------------------------------------------------------------
| Generated seed destination path. Is relative to projects base path.
| In command with --path option can overwrite.
|
*/
'path' => base_path('database/seeds'),
],
];
Note: Generated files may need some auto-formatting.
The db-exporter:migrate
command is used for creating migration files from database. It has several options:
- prefix - database name prefix in migration files
- select - array of selected database table names (if set
ignore
option is ignored) - ignore - array of ignored database table names
- database - specify database connection name (if option is not set the default connection is used)
- force - force overwriting existing migration files
- path - output destination path relative to project root (default is
{PROJECT ROOT}/database/migrations
)
Note: Model path given by migration.path
config key have to be writable by PHP to generate models.
The example assumes following database tables:
- users
- groups
- pages with foreign key to user id
Exports all tables from default database:
php artisan db-exporter:migrate
The above command will generate following files into {PROJECT ROOT}/database/migrations
directory:
YYYY-MM-DD_000000_create_users_table.php
YYYY-MM-DD_000001_create_groups_table.php
YYYY-MM-DD_000002_create_pages_table.php
Note: Table names and column names are converted to snake cased.
The db-exporter:models
command is used for creating models from database. It has several options:
- prefix - database name prefix in migration files
- select - array of selected database table names (if set
ignore
option is ignored) - ignore - array of ignored database table names
- connection - specify database connection name (if option is not set the default connection is used)
- force - force overwriting existing migration files
- namespace - models namespace (default is
App\Models
) - path - output destination path relative to project root (default is
{PROJECT ROOT}/database/migrations
)
Note: Some situation foreign methods name can match in models, so manual renaming is needed.
Note: In some cases relation guess (One to One
, Many to One
, One to Many
) can generate same method names in single class.
Note: Model path given by model.path
config key have to be writable by PHP to generate models.
Creating models from default database:
php artisan db-exporter:models
The db-exporter:seed
command is used for creating seeds from database data. It has several options:
- prefix - database name prefix in migration files
- select - array of selected database table names (if set
ignore
option is ignored) - ignore - array of ignored database table names
- connection - specify database connection name (if option is not set the default connection is used)
- force - force overwriting existing migration files
- path - output destination path relative to project root (default is
database/seeds
)
Note: Seed path given by seed.path
config key have to be writable by PHP to generate seed classes.
Creating seed files from default database:
php artisan db-exporter:seed
This package is licensed under the MIT License