[英]Generating migration from existing database in Yii or Laravel
我正在開發一個具有相當復雜的數據庫(150多個表)的項目。 為了能夠維護更改,我決定添加遷移,最好使用Yii或Laravel。
有人知道,是否可以從現有數據庫生成初始遷移?
手動創建它:
如果沒有辦法,有沒有人知道一個好的基於PHP的框架,它支持這樣的功能?
在Yii中完成此操作的說明:
將數據庫連接設置添加到protected/config/console.php
。
運行yiic migrate create initial
以創建yiic migrate create initial
的存根代碼。
將此要點的內容復制到protected/commands/InitialDbMigrationCommand.php
。
運行yiic initialdbmigration 'name_of_your_database' > initial_migration.php
以生成用於初始數據庫遷移的up()
和down()
方法。
將initial up()
和down()
方法從initial_migration.php
復制並粘貼到步驟2中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
因為遷移是關於設置數據庫結構並對其進行更改,而不是反映當前數據庫,所以沒有這種方式。
這也不是你必須做的一步。 您可以從目前所處的位置開始,這將使您能夠回滾到這一點。 這意味着您可以為當前表進行遷移,而無需指定其整個結構,而只需指定更改。
假設您有一個名為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
這將添加或刪除列firstname,而不會以任何其他方式影響您的表。
這是我創建的Laravel包,它就是這樣做的。 它會自動從現有數據庫生成干凈准確的Laravel遷移。
由於它不對數據庫做任何假設,因此它應該適用於任何數據庫結構,同時保留原始索引和外鍵名稱。
至於Yii 1.x, schmunk創建了一個很棒的database-command
yiic命令。
此命令僅涵蓋遷移。 您必須編寫自己的向下遷移 。
要使用它:
從GitHub獲取最新版本並將其內容放入/protected/commands
文件夾(創建一個,如果它不存在)。 請注意,您需要按原樣放置內容( 沒有此特定命令的子文件夾 ),這與我們為擴展做的例子相反。
如果要使用yiic database
命令(如文檔中所示),請將EDatabaseCommand.php
文件(和類內部)重命名為DatabaseCommand.php
。 如果沒有這個修復,你將不得不使用yiic edatabase
命令,因為文檔和代碼之間存在輕微的不一致 (至少在最新版本中,寫這個;也許schmunk會解決這個問題)。
完成此操作后,導航回控制台中的protected
文件夾並執行yiic database dump migration_name --prefix=table_name
。
這將在文件名的開頭創建一個migration protected/runtime/migration_name.php
文件,其中包含正確的日期和時間,並填充一系列CDbMigration
命令以重新創建數據庫模式。 訪問文檔中的“ 使用 ”部分,以閱讀有關自定義命令的更多信息。
我同時使用Yii和Laravel,但我找不到你需要的東西。 它們都創建空文件,您需要自己創建遷移腳本。 對於150個表的表,自己創建遷移將是一個挑戰,但它並不像您想象的那么難。 因為您已經掌握了有關字段的信息,所以創建它們不需要這么長時間。
在做了一些研究之后,這就是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
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
我是從頭開始創建它的,因為我不得不手動執行此操作以便將其分發給我的團隊。
希望能幫助到你!
隨意分享錯誤,改進和評論。
我認為答案是: https : //github.com/jamband/yii2-schemadump for Yii2“此命令用於從現有數據庫生成模式。”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.