我正在开发一个具有相当复杂的数据库(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()
方法。
复制并粘贴up()
和down()
方法 from到在步骤 2 中initial_migration.php
创建的文件夹中的文件。protected/migrations
' Doctrine Project '(又名 Doctrine)能够为现有数据库结构创建数据库迁移,因此您可以重新创建现有结构。它可以在 Symfony、Laravel、Yii 和许多框架中轻松实现。
示例来自:
http ://symfony.com/legacy/doc/doctrine/1_2/en/07-Migrations
从数据库
如果您有一个现有的数据库,您可以构建一组迁移类,通过运行以下命令重新创建您的数据库。
$ ./symfony doctrine:generate-migrations-db
从模型
如果您有一组现有的模型,您可以构建一组迁移类,通过运行以下命令来创建您的数据库。
$ ./symfony doctrine:generate-migrations-models
这是我创建的一个 Laravel 包,它正是这样做的。它会自动从您现有的数据库中生成干净且准确的 Laravel 迁移。
由于它不对数据库做任何假设,它应该适用于任何数据库结构,同时甚至保留原始索引和外键名称。
至于 Yii 1.x,schmunk创造了一个很棒的database-command
yiic 命令。
此命令仅涵盖迁移。您必须编写自己的向下迁移。
要使用它:
从 GitHub获取最新版本并将其内容放入/protected/commands
文件夹(如果不存在,则创建一个)。请注意,您需要按原样放置内容(没有此特定命令的子文件夹),这与我们对扩展所做的操作相反。
如果您想使用命令(如文档中建议的那样EDatabaseCommand.php
),将文件(和里面的类)重命名为 。如果没有这个修复,您将不得不使用命令,因为文档和代码之间存在轻微的不一致(至少在最新版本中,在撰写本文时;也许schmunk会解决这个问题)。DatabaseCommand.php
yiic database
yiic edatabase
有了这个,导航回protected
控制台中的文件夹并执行yiic database dump migration_name --prefix=table_name
.
这将在文件名的开头创建一个具有正确日期和时间的迁移protected/runtime/migration_name.php
文件,其中填充了一系列CDbMigration
命令以重新创建您的数据库模式。访问文档中的“用法”部分以阅读有关自定义命令的更多信息。
好吧,因为迁移是关于设置您的数据库结构并对其进行更改,而不是反映当前数据库,所以没有这种方法。
这也不是你必须要做的一步。您可以从现在的位置开始,这将使您能够回滚到这一点。这意味着您可以对当前表进行迁移,而无需指定它们的整个结构,而只需指定更改。
假设您有一个名为 user 的表,并希望将他们的名字添加到其中。
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
这将添加或删除列名,而不会以任何其他方式影响您的表。
我认为答案是:https ://github.com/jamband/yii2-schmadump for Yii2 “这个命令从现有数据库生成模式。”
我同时使用 Yii 和 Laravel,但我找不到你需要的任何一个。它们都创建空文件,您需要自己创建迁移脚本。对于一个有 150 个表的表,自己创建迁移将是一个挑战,但它并不像你想象的那么难。因为您已经拥有有关字段的信息,所以创建时间不会太长。
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 之类的东西中构建你的模式,超级超级有用。我还看到提到了一个可以解析工作台文件的包......但是链接已经死了。
您可能还希望将此 larry 包用于:https ://github.com/JeffreyWay/Laravel-4-Generators
然后,您可以创建一个 la CakePHP 样式的脚手架。
或者,试试这个包:https ://github.com/barryvdh/laravel-migration-generator