从Yii或Laravel中的现有数据库生成迁移

Dam*_*Diz 16 php database migration yii laravel

我正在开发一个具有相当复杂的数据库(150多个表)的项目.为了能够维护更改,我决定添加迁移,最好使用Yii或Laravel.

有人知道,是否可以从现有数据库生成初始迁移?

手动创建它:

  • 永远和永远
  • 非常容易出错.

如果没有办法,有没有人知道一个好的基于PHP的框架,它支持这样的功能?

小智 25

在Yii中完成此操作的说明:

  1. 添加数据库连接设置protected/config/console.php.

  2. 运行yiic migrate create initial以创建迁移的存根代码.

  3. 将此要点的内容复制到protected/commands/InitialDbMigrationCommand.php.

  4. 运行yiic initialdbmigration 'name_of_your_database' > initial_migration.php以生成初始数据库迁移的方法up()down()方法.

  5. 复制并粘贴up()down()方法initial_migration.phpprotected/migrations步骤2中文件夹中创建的文件.

  • 你的回答引导我们[进入关于meta的有趣讨论](http://meta.stackoverflow.com/q/275485/1469208).如果您可以在此答案下方包含您的要点中的完整代码(编辑并添加此代码,请注意),那么您的答案将是完美的.我自己做了,但不得不删除我的更改,因为我被警告我正在打破许可证,只有你(主要作者)可以将此代码添加到您自己的答案中.请你考虑加一下吗? (7认同)

Nik*_*ess 1

由于迁移是关于设置数据库结构并对其进行更改,而不是反映当前数据库,因此没有这样的方法。

这也不是您必须执行的步骤。您可以从当前位置开始,这将使您能够回滚到这一点。这意味着您可以对当前表进行迁移,而无需指定其整个结构,而只需指定更改。

假设您有一个名为 user 的表,并且想要将他们的名字添加到其中。

php artisan migrate:make add_firstname_to_user
Run Code Online (Sandbox Code Playgroud)

现在进入application/migrations并找到迁移文件,添加此

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

public function down() {
    Schema::table('user', function($table)
    {
        $table->drop_column('firstname');
    });
}
Run Code Online (Sandbox Code Playgroud)

现在您可以添加迁移它

php artisan migrate:install // if you haven't run this, should only be once
php artisan migrate
Run Code Online (Sandbox Code Playgroud)

..并使用回滚

php artisan migrate:rollback
Run Code Online (Sandbox Code Playgroud)

这将添加或删除列名字,而不会以任何其他方式影响您的表。