我正在开发一个拥有相当复杂的数据库(150多个表)的项目。为了能够维护更改,我决定添加迁移,最好使用Yii或Laravel。
有人知道,是否可以从现有数据库生成初始迁移?
手工创建:
如果没有办法,有没有人知道一个支持这种功能的基于PHP的好框架?
答案 0 :(得分:25)
在Yii中完成此任务的说明:
将您的数据库连接设置添加到protected/config/console.php
。
运行yiic migrate create initial
以创建迁移的存根代码。
将this gist的内容复制到protected/commands/InitialDbMigrationCommand.php
。
运行yiic initialdbmigration 'name_of_your_database' > initial_migration.php
以生成用于初始数据库迁移的up()
和down()
方法。
将up()
中的down()
和initial_migration.php
方法复制并粘贴到步骤2中protected/migrations
文件夹中创建的文件中。
答案 1 :(得分:4)
' Doctrine Project' (aka 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
答案 2 :(得分:1)
好了,因为迁移是关于设置数据库结构并对其进行更改,而不是反映当前数据库没有这种方式。
这也不是你必须做的一步。您可以从目前所处的位置开始,这将使您能够回滚到这一点。这意味着您可以为当前表进行迁移,而无需指定其整个结构,只需指定更改。
假设您有一个名为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
这将添加或删除列名,而不会以任何其他方式影响您的表。
答案 3 :(得分:1)
这是我创建的Laravel包,它正是这样做的。它可以从现有数据库自动生成干净准确的Laravel迁移。
由于它没有对数据库做任何假设,它应该适用于任何数据库结构,同时保留原始索引和外键名称。
答案 4 :(得分:1)
至于Yii 1.x, schmunk 创造了一个精彩的database-command
yiic命令。
此命令仅涵盖迁移。您必须编写自己的向下迁移。
使用它:
获取the newest version from GitHub并将其内容放入/protected/commands
文件夹(创建一个,如果它不存在)。请注意,您需要将内容按(without subfolder放置此特定命令),这与我们对扩展的示例相反。
如果要使用EDatabaseCommand.php
命令(如文档中所示),请将DatabaseCommand.php
文件(和内部类)重命名为yiic database
。如果没有此修复程序,您将必须使用yiic edatabase
命令,there's slight inconsistency between docs and the code(至少在最新版本中,编写此内容时;可能 schmunk 将修复此问题)。
有了这个,请导航回控制台中的protected
文件夹并执行yiic database dump migration_name --prefix=table_name
。
这将在文件名的开头创建一个具有正确日期和时间的迁移protected/runtime/migration_name.php
文件,并填充一系列CDbMigration
命令以重新创建数据库模式。访问文档中的“Usage”部分,了解有关自定义命令的更多信息。
答案 5 :(得分:0)
我同时使用Yii和Laravel,但我找不到你需要的东西。它们都创建空文件,您需要自己创建迁移脚本。 对于150个表的表,自己创建迁移将是一个挑战,但它并不像您想象的那么难。因为您已经掌握了有关字段的信息,所以创建它们不需要这么长时间。
答案 6 :(得分:0)
经过一些研究,这是Laravel所需要的:https://github.com/XCMer/larry-four-generator
(至少版本4,谁知道这将有多长时间,Laravel变化太快,并且有太多重大变化)
您需要运行php artisan larry:fromdb
,它会向您显示表格......您也可以排除或仅处理某些表格(请查看自述文件)。
再次,如果你喜欢在MySQL Workbench之类的东西中构建你的模式,超级超级有用。我还看到了一个解析工作台文件的软件包...但链接已经死了。
您可能还希望将此拉里包用于:https://github.com/JeffreyWay/Laravel-4-Generators
然后,您可以创建一个CakePHP样式的脚手架。
或者,试试这个包:https://github.com/barryvdh/laravel-migration-generator
答案 7 :(得分:0)
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
我已经从头开始创建它,因为我不得不手动执行此操作以便将其分发给我的团队。
希望它有所帮助!
随意分享错误,改进和评论。
答案 8 :(得分:0)
我认为Yii2的答案是:https://github.com/jamband/yii2-schemadump "此命令用于从现有数据库生成模式。"