Generating migration from existing database in Yii or Laravel

后端 未结 9 901
南方客
南方客 2021-01-31 05:39

I\'m working on a project that has a fairly complex database (150+ tables). In order to be able to maintain changes, I\'ve decided to add migrations, preferably using Yii or Lar

相关标签:
9条回答
  • 2021-01-31 06:12

    'Doctrine Project' (aka Doctrine) has the ability to create DB migrations for existing DB structures, so you can recreate the existing structure. It can be easily implemented in Symfony, Laravel, also in Yii and many frameworks.

    Sample from:
    http://symfony.com/legacy/doc/doctrine/1_2/en/07-Migrations

    From Database

    If you have an existing database you can build a set of migration classes that will re-create your database by running the following command.

    $ ./symfony doctrine:generate-migrations-db
    

    From Models

    If you have an existing set of models you can build a set of migration classes that will create your database by running the following command.

    $ ./symfony doctrine:generate-migrations-models
    
    0 讨论(0)
  • 2021-01-31 06:19

    Instructions for accomplishing this in Yii:

    1. Add your database connection settings to protected/config/console.php.

    2. Run yiic migrate create initial to create the stub code for the migration.

    3. Copy contents of this gist to protected/commands/InitialDbMigrationCommand.php.

    4. Run yiic initialdbmigration 'name_of_your_database' > initial_migration.php to generate up() and down() methods for initial database migration.

    5. Copy and paste up() and down() methods from initial_migration.php to the file created in the protected/migrations folder in step 2.

    0 讨论(0)
  • 2021-01-31 06:20

    Here is a Laravel package I created that does exactly that. It automatically generates clean and accurate Laravel migrations from your existing database.

    As it doesn't make any assumptions of the database, it should work on any database structure while even keeping the original index and foreign key names.

    https://github.com/Xethron/migrations-generator

    0 讨论(0)
  • 2021-01-31 06:20

    Well since migration is about setting up your database structure and make changes to it, not to reflect a current database there is no such way.

    And this is also not a step you have to make. You can start from where you are at the moment, which will make you able to rollback up to this point. Which means you can make migrations for your current tables without having to specify their entire structure, but just the changes only.

    Let's say you have a table called user and want to add their firstname to it.

    php artisan migrate:make add_firstname_to_user
    

    Now go into application/migrations and find the migration file, add this

    public function up()
    {
        Schema::table('user', function($table)
        {
            $table->string('firstname');
        });
    }
    
    public function down() {
        Schema::table('user', function($table)
        {
            $table->drop_column('firstname');
        });
    }
    

    Now you can add migrate it

    php artisan migrate:install // if you haven't run this, should only be once
    php artisan migrate
    

    .. and rollback using

    php artisan migrate:rollback
    

    This will add or drop the column firstname, without affecting your table in any other way.

    0 讨论(0)
  • 2021-01-31 06:22

    As for Yii 1.x, schmunk has created a wonderful database-command yiic command.

    This command covers only up migrations. You must write your own down migrations.

    To use it:

    1. Get the newest version from GitHub and put it's contents into /protected/commands folder (create one, if it does not exist). Note, that you need to put contents as is (without subfolder for this particular command), which is contrary to what we do for example for extensions.

    2. Rename EDatabaseCommand.php file (and class inside) to DatabaseCommand.php, if you want to use yiic database command (as suggested in docs). Without this fix, you'll have to use yiic edatabase command, as there's slight inconsistency between docs and the code (at least in the newest version, as of writing this; maybe schmunk is going to fix this).

    3. Having this, navigate back to protected folder in your console and execute yiic database dump migration_name --prefix=table_name.

    This will create a migration protected/runtime/migration_name.php file with proper date and time in the beginning of file name, filled with series of CDbMigration commands to recreate your database schema. Visit "Usage" section in the docs to read more about customizing command.

    0 讨论(0)
  • 2021-01-31 06:30

    I think that the answer is: https://github.com/jamband/yii2-schemadump for Yii2 "This command to generate the schema from an existing database."

    0 讨论(0)
提交回复
热议问题