」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 忽略 Doctrine DBAL 4 上的自訂索引

忽略 Doctrine DBAL 4 上的自訂索引

發佈於2024-07-31
瀏覽:565

Ignore custom indexes on Doctrine DBAL 4

您可以使用實體檔案上的#[ORM\Index(fields: ['fieldName'] 屬性建立資料庫索引,Doctrine 將完成剩餘的工作來為您管理索引,但是我不會談論這個。

隨著您的專案成長或需要特定要求,您可能需要使用自訂索引類型,例如GIST、GIN、BRIN 等(https://www.postgresql.org/docs/current/indexes-types.html )。 Doctrine 不支援建立開箱即用的特定於資料庫供應商的索引類型(參考)。

要解決此問題,您可以直接對資料庫執行 CREATE INDEX DDL,或將 DDL 寫入到doctrine-migrations 檔案中。後一個選項可讓您更輕鬆地部署或回滾變更。

無論您使用哪種方法建立自訂索引,Doctrine 都會將這些自訂索引始終標記為未映射索引,因此如果您執行Doctrine:schema:validate 您將收到錯誤,指出如果您的資料庫不同步,同樣,在執行doctrine:schema:update --dump-sql 或doctrine:migrations:diff 時,它會顯示DROP INDEX ... 語句以刪除自訂索引。

解決方案

我正在使用這些軟體包版本。 (我相信該解決方案將適用於相同主要版本的軟體包):

    學說/dbal 4.0.4
  • 學說/學說包 2.12.0
我找到了幾個教程來處理這個問題,但並不令人滿意:

    https://www.liip.ch/en/blog/doctrine-and- generated-columns 這不再起作用,因為 Doctrine DBAL 刪除了 DBAL 4 上的事件管理器。 (參考)
  • https://medium.com/yousign-engineering-product/ignore-custom-indexes-on-doctrine-dbal-b5131dd22071 這顯示了一條棄用訊息「platform_service」設定金鑰自doctrine-bundle 2.9以來已棄用。 DBAL 4 將不再支援透過連線參數設定自訂平台。 (參考)
我在這裡發現了一個關於 platform_service 配置替換的 GitHub 問題 https://github.com/doctrine/DoctrineBundle/issues/1656。

閱讀這兩頁為我提供了有關如何透過 Doctrine 中間件使用自訂 DBAL 平台的所有資訊:

    https://github.com/doctrine/dbal/pull/5699
  • https://symfony.com/bundles/DoctrineBundle/current/middlewares.html
最後,在深入研究原始程式碼後,我找到了解決方案。您需要建立4個文件,其中2個文件是關於Doctrine中間件的,另外2個文件是關於Doctrine DBAL平台和模式的。

根據需要修改命名空間和類別名稱。

真, 'index_name_2' => 真, ]; #[\覆蓋] 受保護函數 _getPortableTableIndexesList(陣列 $tableIndexes, 字串 $tableName): 陣列 { $indexes = 父級::_getPortableTableIndexesList($tableIndexes, $tableName); foreach (array_keys($indexes) as $indexName) { if (isset(self::IGNORED_INDEXES[$indexName])) { 取消設定($indexes[$indexName]); } } 返回$索引; } }
 true,
        'index_name_2' => true,
    ];

    #[\Override]
    protected function _getPortableTableIndexesList(array $tableIndexes, string $tableName): array
    {
        $indexes = parent::_getPortableTableIndexesList($tableIndexes, $tableName);

        foreach (array_keys($indexes) as $indexName) {
            if (isset(self::IGNORED_INDEXES[$indexName])) {
                unset($indexes[$indexName]);
            }
        }

        return $indexes;
    }
}
版本聲明 本文轉載於:https://dev.to/indragunawan/ignore-custom-indexes-on-doctrine-dbal-4-387j?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-12-21
  • 如何創建 100% 高度並隱藏滾動條的全螢幕 Iframe?
    如何創建 100% 高度並隱藏滾動條的全螢幕 Iframe?
    全螢幕iframe高度為100%查詢:是否普遍支援iframe height=100%跨瀏覽器?當使用XHTML1作為doctype時,高度為100%的iframe是否會佔據頁面剩餘高度(不包括頂部的50px固定高度框架)?另外,如何在自動設定 iframe 高度的同時完全隱藏捲軸? 回應:雖然可以...
    程式設計 發佈於2024-12-21
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1 和 $array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建...
    程式設計 發佈於2024-12-21
  • 如何解決 VS2010 中混合 C 和 C++ 專案中的 LNK2001 連結器錯誤?
    如何解決 VS2010 中混合 C 和 C++ 專案中的 LNK2001 連結器錯誤?
    解決VS2010 中混合C 和C 專案中的連結器錯誤問題描述將C 程式碼整合到不同VS2010 專案中的C專案中導致從C 程式碼呼叫C 函數時出現連結錯誤。此錯誤標識為 LNK2001,與未解析的外部符號有關。 解決方案要修正此問題,請遵循特定準則來確保程式碼庫的正確組織: 模組化程式碼: 每個C模...
    程式設計 發佈於2024-12-21
  • 如何在.NET MySqlCommand中啟用MySQL使用者定義變數?
    如何在.NET MySqlCommand中啟用MySQL使用者定義變數?
    在.NET MySqlCommand中使用MySql使用者定義變數在.NET MySqlCommand中執行涉及使用者定義變數的MySQL語句時,您可能會遇到致命錯誤。要解決此問題,請按照下列步驟操作:在您的程式碼中,您有一條 MySQL 語句,用於設定使用者定義的變數“@a”,然後選擇其值。但是,...
    程式設計 發佈於2024-12-21
  • 如何在 Windows 版 XAMPP 升級 PHP:逐步指南
    如何在 Windows 版 XAMPP 升級 PHP:逐步指南
    在XAMPP for Windows 中升級PHP:綜合指南在XAMPP for Windows 中升級PHP 對於維護安全性、功能和效能至關重要您的網頁應用程式的相容性。本指南將提供成功升級 PHP 的逐步流程。 從 PHP 官方網站降級您可能嘗試過直接下載最新的 PHP來自 PHP 官方網站的版...
    程式設計 發佈於2024-12-21
  • 如何可靠地確定我的 PHP 腳本是從命令列運行還是透過 HTTP 運行?
    如何可靠地確定我的 PHP 腳本是從命令列運行還是透過 HTTP 運行?
    確定PHP 中的命令列執行或HTTP 執行PHP 腳本開發中的一個常見任務是確定執行環境的類型,無論是該腳本透過命令列或透過HTTP 運行。這些知識對於制定輸出格式決策和相應地自訂行為至關重要。 檢查 SERVER['argc'] 是否存在的傳統方法並不可靠,因為即使使用“Apach...
    程式設計 發佈於2024-12-21
  • 如何增加 Web 表單的最大 POST 資料大小?
    如何增加 Web 表單的最大 POST 資料大小?
    最大化後期資料處理以增強表單提交在Web 開發中,經常會遇到需要處理大量資料(例如使用者輸入或檔案上傳)的情況。透過表單元素提交。處理大量發布資料對於確保網站的無縫運作至關重要。但是,可能存在限制最大貼文大小的限制,從而導致意外錯誤並阻礙資料提交。 為了應對這項挑戰,必須探索增加 Web 應用程式中...
    程式設計 發佈於2024-12-21
  • 如何在 C++ 中定義靜態 const std::string 成員?
    如何在 C++ 中定義靜態 const std::string 成員?
    定義const std::string 類型的靜態資料成員在C 中,定義std::string 類型的私有靜態const 成員在類別內使用類別內初始化,如下所示,不符合C標準:class A { private: static const string RECTANGLE = &q...
    程式設計 發佈於2024-12-21
  • 使用 Uvicorn 在 FastAPI 中發出並發 HTTP 請求時如何避免「ConnectionClosed」錯誤?
    使用 Uvicorn 在 FastAPI 中發出並發 HTTP 請求時如何避免「ConnectionClosed」錯誤?
    在Uvicorn/FastAPI 中發出HTTP 請求處理使用FastAPI 和Uvicorn 建構的HTTP 端點時,通常會從外部要求資料。但是,在處理多個並發請求時,可能會出現「can't handle event type ConnectionClosed when role=SERV...
    程式設計 發佈於2024-12-21
  • 如何使用非標準憑證檔案在Go Web伺服器上建立HTTPS?
    如何使用非標準憑證檔案在Go Web伺服器上建立HTTPS?
    如何使用非標準憑證檔案在 Go Web 伺服器上建立 HTTPS提供的文件建議連接三個 .pem 檔案。但是,如果您沒有這些文件,以下是如何使用您擁有的證書文件設定HTTPS:組合中間證書:雖然Go 通常需要一個串聯的證書文件,其他平台僅儲存根憑證。為了確保相容性,請連接中間憑證:cat websi...
    程式設計 發佈於2024-12-21
  • 如何可靠地處理帶有子元素的絕對定位 div 上的滑鼠移出事件?
    如何可靠地處理帶有子元素的絕對定位 div 上的滑鼠移出事件?
    在沒有jQuery 的情況下處理帶有子元素的絕對Div 中的Mouseout 事件處理絕對定位的div 時,處理mouseout 事件可能具有挑戰性。預設情況下,如果滑鼠懸停在父 div 內的子元素上,則在滑鼠退出外部 div 之前,mouseout 事件會提前觸發。 要解決此問題,請考慮使用 on...
    程式設計 發佈於2024-12-21
  • PHP 的 `==` 和 `===` 運算子有什麼不同?
    PHP 的 `==` 和 `===` 運算子有什麼不同?
    PHP Double (==) 和 Triple (===) 相等比較有何不同? 在 PHP 中比較值時,兩個可以使用不同的運算子:鬆散相等 (==) 運算子和嚴格相同 (===) 運算子。了解它們的細微差別對於確保可靠的比較至關重要。 鬆散相等 (==) 比較鬆散相等運算子在比較值之前執行型別雜亂...
    程式設計 發佈於2024-12-21
  • 如何在 JavaScript 中對字串執行數學運算?
    如何在 JavaScript 中對字串執行數學運算?
    將字串轉換為數字進行數學運算儘管包含數字字符,但字串不能直接作為數字進行操作。要執行算術運算,必須先將它們轉換為數字形式。 考慮給出的例子:var num1 = '20', num2 = '30.5';直接添加這些字串會導致串聯:num1 num2; // '2030.5'要強制將它們視...
    程式設計 發佈於2024-12-21
  • 儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    解決PHP 中的POST 請求故障在提供的程式碼片段中:action=''而非:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"檢查$_POST陣列:表單提交後使用 var_dump 檢查 $_POST 陣列的內...
    程式設計 發佈於2024-12-21

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3