成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

luoyibu / 889人閱讀

摘要:結語到此,數據遷移組件就已經很靈活的集成到我們自己的項目中了,而且你還可以根據自己的項目靈活修改自定義命令腳本文件。但是如果使用久了會發(fā)現(xiàn)現(xiàn)在的數據遷移會有兩個問題不支持類型,在相關中,官方開發(fā)人員有回復所以只能添加自定義類型。

自定義命令腳本 目錄結構

目前的項目結構是這樣的(參照代碼庫):

其中,db/migrations文件夾是遷移類文件夾,config/db.php是我們項目原有的db配置,migrations.phpmigrations-db.php是遷移組件需要的配置文件。

編寫自定義命令腳本

現(xiàn)在先在根目錄新建文件:migrate,沒有后綴名,并且添加可執(zhí)行權限。

并且參照組件原有的命令腳本vendor/doctrine/migrations/doctrine-migrations.php,首先獲取項目原有的數據庫配置信息,替換掉migrations-db.php數據庫配置文件:

$db_config = include "config/db.php";
$db_params = [
    "driver" => "pdo_mysql",
    "host" => $db_config["host"],
    "port" => $db_config["port"],
    "dbname" => $db_config["dbname"],
    "user" => $db_config["user"],
    "password" => $db_config["password"],
];
try {
    $connection = DriverManager::getConnection($db_params);
} catch (DBALException $e) {
    echo $e->getMessage() . PHP_EOL;
    exit;
}

然后配置組件,替換掉migrations.php配置文件:

$configuration = new Configuration($connection);
$configuration->setName("Doctrine Migrations");
$configuration->setMigrationsNamespace("dbmigrations");
$configuration->setMigrationsTableName("migration_versions");
$configuration->setMigrationsDirectory("db/migrations");

最后是完整的命令腳本代碼:

#!/usr/bin/env php
 "pdo_mysql",
    "host" => $db_config["host"],
    "port" => $db_config["port"],
    "dbname" => $db_config["dbname"],
    "user" => $db_config["user"],
    "password" => $db_config["password"],
];
try {
    $connection = DriverManager::getConnection($db_params);
} catch (DBALException $e) {
    echo $e->getMessage() . PHP_EOL;
    exit;
}
// 遷移組件配置
$configuration = new Configuration($connection);
$configuration->setName("Doctrine Migrations");
$configuration->setMigrationsNamespace("dbmigrations");
$configuration->setMigrationsTableName("migration_versions");
$configuration->setMigrationsDirectory("db/migrations");
// 創(chuàng)建命令腳本
$helper_set = new HelperSet([
    "question" => new QuestionHelper(),
    "db" => new ConnectionHelper($connection),
    new ConfigurationHelper($connection, $configuration),
]);
$cli = ConsoleRunner::createApplication($helper_set);
try {
    $cli->run();
} catch (Exception $e) {
    echo $e->getMessage() . PHP_EOL;
}

現(xiàn)在執(zhí)行遷移相關命令時,用./migrate替換之前的vendor/bin/doctrine-migrations部分即可。

同時migrations.phpmigrations-db.php這兩個配置文件也可以刪除了。

PhpStorm集成遷移命令

如果你使用PhpStorm,命令行還可以集成到開發(fā)工具中去,會有自動提示,大大提高工作效率:

PhpStorm -> Preferences -> Command Line Tool Support -> 添加

Choose tool選擇Tool based on Symfony Console,點擊OK

Alias輸入m, Path to PHP executable 選擇php路徑,path to script選擇跟目錄下的migrate文件

點擊OK,提示 Found 9 commands 則配置成功。

PhpStorm -> Tools -> Run Command,彈出命令窗口,輸入m即會出現(xiàn)命令提示。

結語

到此,數據遷移組件就已經很靈活的集成到我們自己的項目中了,而且你還可以根據自己的項目靈活修改自定義命令腳本文件。

但是如果使用久了會發(fā)現(xiàn)現(xiàn)在的數據遷移會有兩個問題:

不支持tinyint類型,在相關issues中,官方開發(fā)人員有回復:

"Tiny integer" is not supported by many database vendors. DBAL"s type system is an abstraction layer for SQL types including type conversion from PHP to database value and back. I am assuming that your issue refers to MySQL, where we do not have a distinct native SQL type to use for BooleanType mapping. Therefore MySQL"s TINYINT is used for that purpose as is fits best from all available native types and in DBAL we do not have an abstraction for tiny integers as such (as mentioned above).

What you can do is implement your own tiny integer custom type and tell DBAL to use column comments (for distinction from BooleanType in MySQL). That should work. See the documentation.

To tell DBAL to use column comments for the custom type, simply override the requiresSQLCommentHint() method to return true.
所以只能添加自定義類型。

另外一個問題,就是不支持enum類型。深入代碼之后,發(fā)現(xiàn)enum類型的特殊格式并不好融入到組件中去,自定義類型也不能支持,但是如果你是半途中加入數據遷移組件,現(xiàn)在項目中如果已經有了數據表結構,且包含enum類型的字段,那么使用遷移組件是會報錯。

那么,下一章我們就來完成這兩件事:添加tinyint的自定義類型,解決enum報錯的問題。

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

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

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

相關文章

  • [Doctrine Migrations] 據庫遷移組件深入解析三:定義數據字段類型

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

    ysl_unh 評論0 收藏0
  • [Doctrine Migrations]據庫遷移組件深入解析一:安裝與使用

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

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

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

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

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

    skinner 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<