我正在开发一个相当复杂的数据库(150多个表)项目。为了能够维护变更,我决定添加迁移,最好使用 Yii 或 Laravel。
有人知道是否可能从现有数据库生成初始迁移吗?
手动创建会:
- 耗费很长时间
- 非常容易出错。
如果没有办法,有人知道一个良好的基于PHP的框架,支持这样的功能吗?
在 Yii 中完成此操作的步骤:
将您的数据库连接设置添加到 protected/config/console.php
文件中。
运行 yiic migrate create initial
命令创建迁移的存根代码。
将此清单的内容复制到 protected/commands/InitialDbMigrationCommand.php
文件中。
运行 yiic initialdbmigration 'name_of_your_database' > initial_migration.php
生成用于初始数据库迁移的 up()
和 down()
方法。
从步骤 2 创建的文件中复制并粘贴 up()
和 down()
方法到 protected/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
由于迁移是关于设置数据库结构并对其进行更改,而不是反映当前数据库的方式,因此没有这样的方法。
这也不是必须要执行的步骤。您可以从当前位置开始,这将使您能够回滚到此点。这意味着您可以为当前表制作迁移,而无需指定它们的整个结构,只需指定更改即可。
假设您有一个名为“用户”的表,并想向其中添加他们的名字。
php artisan migrate:make add_firstname_to_user
现在进入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');
});
}
现在您可以添加迁移
php artisan migrate:install // if you haven't run this, should only be once
php artisan migrate
使用回滚功能
php artisan migrate:rollback
这将添加或删除列firstname,而不以任何其他方式影响您的表。
database-command
yiic命令。
此命令仅涵盖向上迁移。您必须编写自己的向下迁移。
使用方法如下:
从GitHub获取最新版本,并将其内容放入/protected/commands
文件夹中(如果不存在,请创建一个)。请注意,您需要将内容原样放置在此特定命令的无子文件夹中,这与我们为扩展程序所做的相反。
如果要使用yiic database
命令(如建议中所述),请重命名EDatabaseCommand.php
文件(和类内部)为DatabaseCommand.php
。如果没有进行此修复,则必须使用yiic edatabase
命令,因为文档和代码之间存在轻微的不一致性(至少在编写本文时是最新版本;也许schmunk会修复这个问题)。
有了这个,回到控制台中的protected
文件夹,并执行yiic database dump migration_name --prefix=table_name
。
protected/runtime/migration_name.php
文件,文件名开头会带有正确的日期和时间,并填充一系列CDbMigration
命令以重新创建数据库架构。请访问文档中的“使用说明”部分了解更多自定义命令信息。现在Yii有一个:
这允许分布式团队轻松地在本地更新数据库,然后通过版本控制系统(我使用git)自动将其更新与其他开发人员一起分发到代码的其余部分。它还执行完整的初始数据库转储到xml和迁移文件。
项目主页: https://code.google.com/p/yii-automatically-generated-migration-files/
源代码: https://code.google.com/p/yii-automatically-generated-migration-files/source/checkout
我从头开始创建它,因为我很烦恼必须手动完成这项工作才能将其分发给我的团队。
希望它有所帮助!
欢迎分享错误、改进和评论。
经过一些研究,这是你需要使用 Laravel 的东西:https://github.com/XCMer/larry-four-generator
(至少是第4版,谁知道这会持续多久,Laravel 变化太快,有太多的重大变化)
你需要运行 php artisan larry:fromdb
,它会显示表格...你也可以排除或只处理某些表格(查看自述文件)。
如果你喜欢在 MySQL Workbench 等工具中构建模式,那么这个工具非常非常有用。我还看到提到一个可以解析 Workbench 文件的包...但链接已失效。
你可能还希望使用这个 larry 包与 https://github.com/JeffreyWay/Laravel-4-Generators 一起使用。
然后你可以像 CakePHP 那样创建脚手架。
或者,尝试这个包:https://github.com/barryvdh/laravel-migration-generator