国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[Doctrine Migrations]數據庫遷移組件的深入解析一:安裝與使用

phpmatt / 3047人閱讀

摘要:是基于組件的數據遷移組件。版本管理把數據庫變更寫入到代碼中,來進行版本管理。此系列文章不討論現有框架中數據遷移組件的使用,而是著重于探討如何多帶帶使用遷移組件以及如何把數據遷移組件集成到自己的項目個性化定制。

場景分析

團隊開發中,每個開發人員對于數據庫都修改都必須手動記錄,上線時需要人工整理,運維成本極高。而且在多個開發者之間數據結構同步也是很大的問題。Doctrine Migrations組件把數據庫變更加入到代碼中和代碼一起進行版本管理,很好的解決了上述問題。

Doctrine Migrations是基于Doctrine DBAL組件的數據遷移組件。集成于Laravel,Symfony等主流框架。大概可以分為兩種方式進行遷移,即版本管理方式和diff方式。

版本管理:把數據庫變更寫入到代碼中,來進行版本管理。Laravel框架就是版本管理的模式,遷移組件默認的命令行就是支持這種模式。

diff:把現有數據庫結構和代碼里面的數據庫結構來做對比,執行差異的sql以保證一致性。一般需要ORM的支持,Symfony框架就是使用Doctrine2ORM工具加上Doctrine DBAL來進行diff方式的數據遷移。

此系列文章不討論現有框架中數據遷移組件的使用,而是著重于探討如何多帶帶使用遷移組件以及如何把數據遷移組件集成到自己的項目、個性化定制

安裝

composer安裝

composer require doctrine/migrations ~1.8.0
本系列使用的是目前最新的1.8.1版本
配置

安裝之后不能直接使用,還需要進行組件配置以及數據庫配置:

根目錄下建立migrations.php文件,配置組件:

return [
    "name" => "Doctrine Migrations", // 組件顯示名稱
    "migrations_namespace" => "dbmigrations", // 遷移類的命名空間
    "table_name" => "migration_versions", // 遷移組件的表名
    "migrations_directory" => "db/migrations", // 遷移類的文件夾
];

詳情的配置參數參見官方文檔。

根目錄下簡歷migrations-db.php文件,配置數據庫信息:

return [
    "driver" => "pdo_mysql",
    "host" => "localhost",
    "port" => 3306,
    "user" => "root",
    "password" => "1236",
    "dbname" => "migrations",
];

到此,組件需要的配置已經完成。

使用

運行vendor目錄下面的命令生成版本遷移類文件。

./vendor/bin/doctrine-migrations migrations:generate

在遷移類目錄/db/migrations下面生成Version20180608155932.php類文件,此文件即是用于寫入遷移sql的類,Version后面的數字則是當前版本號。

重寫up方法,用于執行遷移sql:

public function up(Schema $schema): void
{
    $table = $schema->createTable("test1");
    $table->addColumn("id", "integer")->setUnsigned(true)->setAutoincrement(true);
    $table->addColumn("name", "string")->setDefault("")->setLength(20);
    $table->setPrimaryKey(["id"]);
}

這個腳本是生成一個test1的表。

重寫down方法,用于版本回退,撤銷up方法的遷移操作:

public function down(Schema $schema): void
{
    if ($schema->hasTable("test1")) {
        $schema->dropTable("test1");
    }
}

執行遷移命令:

./vendor/bin/doctrine-migrations migrations:migrate

這樣就成功的創建了一個版本的遷移數據。遷移類腳本可以使用$schema來操作數據庫實體,也可以使用$this->addSql()方法來直接寫入相關的sql,詳細參加官方文檔對于腳本編寫的詳細說明,此處不過多展開。

版本管理

既然遷移使用版本管理,那么多個版本之間可以來回切換。下面是相關的版本切換命令:

./vendor/bin/doctrine-migrations migrations:migrate 20180608161758

這條命令是恢復到20180608161758版本,除了直接輸入具體版本號之外,還有更加方便的版本別名:

first:回退到初始版本

prev:回到上一個版本

next:遷移到下一個版本

latest:遷移到最新版本(和不加版本號效果一樣)

常用命令
# 生成遷移腳本
php migration.php migrations:generate
# 執行遷移到最新版本
php migration.php migrations:migrate
# --dry-run是空轉參數,只顯示操作結果,不執行修改
php migration.php migrations:migrate --dry-run
# 不執行操作,只寫入文件,對于生產環境需要手動驗證并執行的場景有用
php migration.php migrations:migrate --write-sql=file.sql
# 查看詳細信息
php migration.php status
結語

到此,就學會了migrations組件的基本使用,但是還有如下幾個問題需要我們解決:

一般項目中都會有數據庫配置文件,如何讓組件公用項目中的配置文件?

現在遷移組件所需要的配置文件只能在根目錄,如何讓配置文件更合理的歸檔?

命令行又長又難記,如何簡單使用命令行?

下一章,我們會解決以上問題,并且讓組件更個性化的融入到我們自己的項目中去。

在我的代碼庫可以查看這篇文章的詳細代碼。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/28781.html

相關文章

  • [Doctrine Migrations] 據庫遷移組件深入解析二:自定義集成

    摘要:結語到此,數據遷移組件就已經很靈活的集成到我們自己的項目中了,而且你還可以根據自己的項目靈活修改自定義命令腳本文件。但是如果使用久了會發現現在的數據遷移會有兩個問題不支持類型,在相關中,官方開發人員有回復所以只能添加自定義類型。 自定義命令腳本 目錄結構 目前的項目結構是這樣的(參照代碼庫): showImg(https://segmentfault.com/img/remote/14...

    luoyibu 評論0 收藏0
  • [Doctrine Migrations] 據庫遷移組件深入解析三:自定義數據字段類型

    摘要:自定義根據官方文檔,新建類,集成,并重寫,,,等方法。如果集成遷移組件的時候數據庫里已經存在表且有類型的字段,那么執行遷移命令時就會報錯。下一章我們來詳細研究如何集成方式的數據遷移組件。 自定義type 根據官方文檔,新建TinyIntType類,集成Type,并重寫getName,getSqlDeclaration,convertToPHPValue,getBindingType等方...

    ysl_unh 評論0 收藏0
  • php 學習指南及技術干貨

    摘要:安全生成安全的隨機數,加密數據,掃描漏洞的庫一個兼容標準的過濾器一個生成隨機數和字符串的庫使用生成隨機數的庫一個安全庫一個純安全通信庫一個簡單的鍵值加密存儲庫一個結構化的安全層一個試驗的面向對象的包裝庫一個掃描文件安全的庫 Security 安全 生成安全的隨機數,加密數據,掃描漏洞的庫 HTML Purifier-一個兼容標準的HTML過濾器 RandomLib-一個生成隨機數和字...

    lifefriend_007 評論0 收藏0
  • php 學習指南及技術干貨

    摘要:安全生成安全的隨機數,加密數據,掃描漏洞的庫一個兼容標準的過濾器一個生成隨機數和字符串的庫使用生成隨機數的庫一個安全庫一個純安全通信庫一個簡單的鍵值加密存儲庫一個結構化的安全層一個試驗的面向對象的包裝庫一個掃描文件安全的庫 Security 安全 生成安全的隨機數,加密數據,掃描漏洞的庫 HTML Purifier-一個兼容標準的HTML過濾器 RandomLib-一個生成隨機數和字...

    skinner 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<