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

資訊專欄INFORMATION COLUMN

[Doctrine Migrations]數(shù)據(jù)庫(kù)遷移組件的深入解析一:安裝與使用

phpmatt / 3041人閱讀

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

場(chǎng)景分析

團(tuán)隊(duì)開發(fā)中,每個(gè)開發(fā)人員對(duì)于數(shù)據(jù)庫(kù)都修改都必須手動(dòng)記錄,上線時(shí)需要人工整理,運(yùn)維成本極高。而且在多個(gè)開發(fā)者之間數(shù)據(jù)結(jié)構(gòu)同步也是很大的問(wèn)題。Doctrine Migrations組件把數(shù)據(jù)庫(kù)變更加入到代碼中和代碼一起進(jìn)行版本管理,很好的解決了上述問(wèn)題。

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

版本管理:把數(shù)據(jù)庫(kù)變更寫入到代碼中,來(lái)進(jìn)行版本管理。Laravel框架就是版本管理的模式,遷移組件默認(rèn)的命令行就是支持這種模式。

diff:把現(xiàn)有數(shù)據(jù)庫(kù)結(jié)構(gòu)和代碼里面的數(shù)據(jù)庫(kù)結(jié)構(gòu)來(lái)做對(duì)比,執(zhí)行差異的sql以保證一致性。一般需要ORM的支持,Symfony框架就是使用Doctrine2ORM工具加上Doctrine DBAL來(lái)進(jìn)行diff方式的數(shù)據(jù)遷移。

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

安裝

composer安裝

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

安裝之后不能直接使用,還需要進(jìn)行組件配置以及數(shù)據(jù)庫(kù)配置:

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

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

詳情的配置參數(shù)參見官方文檔。

根目錄下簡(jiǎn)歷migrations-db.php文件,配置數(shù)據(jù)庫(kù)信息:

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

到此,組件需要的配置已經(jīng)完成。

使用

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

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

在遷移類目錄/db/migrations下面生成Version20180608155932.php類文件,此文件即是用于寫入遷移sql的類,Version后面的數(shù)字則是當(dāng)前版本號(hào)。

重寫up方法,用于執(zhí)行遷移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"]);
}

這個(gè)腳本是生成一個(gè)test1的表。

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

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

執(zhí)行遷移命令:

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

這樣就成功的創(chuàng)建了一個(gè)版本的遷移數(shù)據(jù)。遷移類腳本可以使用$schema來(lái)操作數(shù)據(jù)庫(kù)實(shí)體,也可以使用$this->addSql()方法來(lái)直接寫入相關(guān)的sql,詳細(xì)參加官方文檔對(duì)于腳本編寫的詳細(xì)說(shuō)明,此處不過(guò)多展開。

版本管理

既然遷移使用版本管理,那么多個(gè)版本之間可以來(lái)回切換。下面是相關(guān)的版本切換命令:

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

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

first:回退到初始版本

prev:回到上一個(gè)版本

next:遷移到下一個(gè)版本

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

常用命令
# 生成遷移腳本
php migration.php migrations:generate
# 執(zhí)行遷移到最新版本
php migration.php migrations:migrate
# --dry-run是空轉(zhuǎn)參數(shù),只顯示操作結(jié)果,不執(zhí)行修改
php migration.php migrations:migrate --dry-run
# 不執(zhí)行操作,只寫入文件,對(duì)于生產(chǎn)環(huán)境需要手動(dòng)驗(yàn)證并執(zhí)行的場(chǎng)景有用
php migration.php migrations:migrate --write-sql=file.sql
# 查看詳細(xì)信息
php migration.php status
結(jié)語(yǔ)

到此,就學(xué)會(huì)了migrations組件的基本使用,但是還有如下幾個(gè)問(wèn)題需要我們解決:

一般項(xiàng)目中都會(huì)有數(shù)據(jù)庫(kù)配置文件,如何讓組件公用項(xiàng)目中的配置文件?

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

命令行又長(zhǎng)又難記,如何簡(jiǎn)單使用命令行?

下一章,我們會(huì)解決以上問(wèn)題,并且讓組件更個(gè)性化的融入到我們自己的項(xiàng)目中去。

在我的代碼庫(kù)可以查看這篇文章的詳細(xì)代碼。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/28781.html

相關(guān)文章

  • [Doctrine Migrations] 數(shù)據(jù)庫(kù)遷移組件深入解析二:自定義集成

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

    luoyibu 評(píng)論0 收藏0
  • [Doctrine Migrations] 數(shù)據(jù)庫(kù)遷移組件深入解析三:自定義數(shù)據(jù)字段類型

    摘要:自定義根據(jù)官方文檔,新建類,集成,并重寫,,,等方法。如果集成遷移組件的時(shí)候數(shù)據(jù)庫(kù)里已經(jīng)存在表且有類型的字段,那么執(zhí)行遷移命令時(shí)就會(huì)報(bào)錯(cuò)。下一章我們來(lái)詳細(xì)研究如何集成方式的數(shù)據(jù)遷移組件。 自定義type 根據(jù)官方文檔,新建TinyIntType類,集成Type,并重寫getName,getSqlDeclaration,convertToPHPValue,getBindingType等方...

    ysl_unh 評(píng)論0 收藏0
  • php 學(xué)習(xí)指南及技術(shù)干貨

    摘要:安全生成安全的隨機(jī)數(shù),加密數(shù)據(jù),掃描漏洞的庫(kù)一個(gè)兼容標(biāo)準(zhǔn)的過(guò)濾器一個(gè)生成隨機(jī)數(shù)和字符串的庫(kù)使用生成隨機(jī)數(shù)的庫(kù)一個(gè)安全庫(kù)一個(gè)純安全通信庫(kù)一個(gè)簡(jiǎn)單的鍵值加密存儲(chǔ)庫(kù)一個(gè)結(jié)構(gòu)化的安全層一個(gè)試驗(yàn)的面向?qū)ο蟮陌b庫(kù)一個(gè)掃描文件安全的庫(kù) Security 安全 生成安全的隨機(jī)數(shù),加密數(shù)據(jù),掃描漏洞的庫(kù) HTML Purifier-一個(gè)兼容標(biāo)準(zhǔn)的HTML過(guò)濾器 RandomLib-一個(gè)生成隨機(jī)數(shù)和字...

    lifefriend_007 評(píng)論0 收藏0
  • php 學(xué)習(xí)指南及技術(shù)干貨

    摘要:安全生成安全的隨機(jī)數(shù),加密數(shù)據(jù),掃描漏洞的庫(kù)一個(gè)兼容標(biāo)準(zhǔn)的過(guò)濾器一個(gè)生成隨機(jī)數(shù)和字符串的庫(kù)使用生成隨機(jī)數(shù)的庫(kù)一個(gè)安全庫(kù)一個(gè)純安全通信庫(kù)一個(gè)簡(jiǎn)單的鍵值加密存儲(chǔ)庫(kù)一個(gè)結(jié)構(gòu)化的安全層一個(gè)試驗(yàn)的面向?qū)ο蟮陌b庫(kù)一個(gè)掃描文件安全的庫(kù) Security 安全 生成安全的隨機(jī)數(shù),加密數(shù)據(jù),掃描漏洞的庫(kù) HTML Purifier-一個(gè)兼容標(biāo)準(zhǔn)的HTML過(guò)濾器 RandomLib-一個(gè)生成隨機(jī)數(shù)和字...

    skinner 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<