成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[Doctrine Migrations] 數(shù)據(jù)庫遷移組件的深入解析三:自定義數(shù)據(jù)字段類型

ysl_unh / 2030人閱讀

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

自定義type

根據(jù)官方文檔,新建TinyIntType類,集成Type,并重寫getName,getSqlDeclarationconvertToPHPValue,getBindingType等方法。

TinyIntType.php完整代碼:


 */
class TinyIntType extends Type
{
    public function getName()
    {
        return "tinyint";
    }
    public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
    {
        $sql = "TINYINT";
        if (is_numeric($fieldDeclaration["length"]) && $fieldDeclaration["length"] > 1) {
            $sql .= "(" . ((int) $fieldDeclaration["length"]) . ")";
        } else {
            $sql .= "(3)";
        }
        if (!empty($fieldDeclaration["unsigned"])) {
            $sql .= " UNSIGNED";
        }
        if (!empty($fieldDeclaration["autoincrement"])) {
            $sql .= " AUTO_INCREMENT";
        }
        return $sql;
    }
    public function convertToPHPValue($value, AbstractPlatform $platform)
    {
        return (null === $value) ? null : (int) $value;
    }
    public function getBindingType()
    {
        return ParameterType::INTEGER;
    }
}

其中getSqlDeclaration方法是用于生成sql語句,需要根據(jù)傳入的參數(shù)處理sql拼接。

注冊自定義類型
Type::addType(TinyIntType::TYPENAME, "db	ypesTinyIntType");
$connection->getDatabasePlatform()->registerDoctrineTypeMapping(TinyIntType::TYPENAME, TinyIntType::TYPENAME);

這樣,你在編寫遷移類代碼的時候就可以使用tinyint了,例如:

public function up(Schema $schema): void
{
    $table = $schema->createTable("test1");
    $table->addColumn("id", "integer")->setUnsigned(true)->setAutoincrement(true);
    $table->addColumn("status", "tinyint")->setLength(2)->setDefault(1);
    $table->setPrimaryKey(["id"]);
}
解決enum類型沖突

遷移組件不支持enum類型,也無法自定義該類型。如果集成遷移組件的時候數(shù)據(jù)庫里已經(jīng)存在表且有enum類型的字段,那么執(zhí)行遷移命令時就會報錯。

為了解決這個問題,我們需要把enum映射為string類型即可:

$connection->getDatabasePlatform()->registerDoctrineTypeMapping("enum", "string");
結(jié)語

至此,我們已經(jīng)完成了遷移組件的所有遷移工作,并且已經(jīng)能很好的在項目中使用它。

目前集成的是版本管理的方式,是遷移組件默認(rèn)支持的,也是laravel框架集成的遷移方式。還有之前說到的另一種diff方式的遷移,diff方式能夠更精準(zhǔn)的控制表結(jié)構(gòu)。

下一章我們來詳細研究如何集成diff方式的數(shù)據(jù)遷移組件。

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

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28796.html

相關(guān)文章

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

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

    luoyibu 評論0 收藏0
  • [Doctrine Migrations]數(shù)據(jù)遷移組件深入解析一:安裝與使用

    摘要:是基于組件的數(shù)據(jù)遷移組件。版本管理把數(shù)據(jù)庫變更寫入到代碼中,來進行版本管理。此系列文章不討論現(xiàn)有框架中數(shù)據(jù)遷移組件的使用,而是著重于探討如何單獨使用遷移組件以及如何把數(shù)據(jù)遷移組件集成到自己的項目個性化定制。 場景分析 團隊開發(fā)中,每個開發(fā)人員對于數(shù)據(jù)庫都修改都必須手動記錄,上線時需要人工整理,運維成本極高。而且在多個開發(fā)者之間數(shù)據(jù)結(jié)構(gòu)同步也是很大的問題。Doctrine Migrati...

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

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

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

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

    skinner 評論0 收藏0

發(fā)表評論

0條評論

ysl_unh

|高級講師

TA的文章

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