簡體   English   中英

從Yii或Laravel中的現有數據庫生成遷移

[英]Generating migration from existing database in Yii or Laravel

我正在開發一個具有相當復雜的數據庫(150多個表)的項目。 為了能夠維護更改,我決定添加遷移,最好使用Yii或Laravel。

有人知道,是否可以從現有數據庫生成初始遷移?

手動創建它:

  • 永遠和永遠
  • 非常容易出錯。

如果沒有辦法,有沒有人知道一個好的基於PHP的框架,它支持這樣的功能?

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

  1. 將數據庫連接設置添加到protected/config/console.php

  2. 運行yiic migrate create initial以創建yiic migrate create initial的存根代碼。

  3. 將此要點的內容復制到protected/commands/InitialDbMigrationCommand.php

  4. 運行yiic initialdbmigration 'name_of_your_database' > initial_migration.php以生成用於初始數據庫遷移的up()down()方法。

  5. 將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遷移。

由於它不對數據庫做任何假設,因此它應該適用於任何數據庫結構,同時保留原始索引和外鍵名稱。

https://github.com/Xethron/migrations-generator

至於Yii 1.x, schmunk創建了一個很棒的database-command yiic命令。

此命令僅涵蓋遷移。 您必須編寫自己的向下遷移

要使用它:

  1. 從GitHub獲取最新版本並將其內容放入/protected/commands文件夾(創建一個,如果它不存在)。 請注意,您需要按原樣放置內容( 沒有此特定命令的子文件夾 ),這與我們為擴展做的例子相反。

  2. 如果要使用yiic database命令(如文檔中所示),請將EDatabaseCommand.php文件(和類內部)重命名為DatabaseCommand.php 如果沒有這個修復,你將不得不使用yiic edatabase命令,因為文檔和代碼之間存在輕微的不一致 (至少在最新版本中,寫這個;也許schmunk會解決這個問題)。

  3. 完成此操作后,導航回控制台中的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM