如何通過 6 個簡單步驟從 SQL 源遷移到 Drupal 8
已發表: 2020-11-24關於遷移到 Drupal 8 的重要性和好處已經說了很多。Drupal 遷移是開發工作流中最重要的部分。 我們需要確保內容無縫傳輸,而不會丟失任何關鍵的用戶信息和數據。 查看此完整指南,了解從 Drupal 7 到 Drupal 8 的成功遷移。
有多種方法可以使用各種來源遷移到 Drupal 8。 我們已經寫過如何從 CSV 遷移到 Drupal 8。其他來源包括 SQL、XML、JSON 等。在本博客中,我們將討論使用 SQL 作為源遷移到 Drupal 8。

為什麼是 SQL?
雖然選擇數據源很大程度上取決於需要遷移的現有數據的源,但為 Drupal 8 遷移選擇 SQL 源的其他一些常見原因是:
- 通過連接到數據庫,可以很容易地編寫查詢來獲取所需的數據。
- 將數據從一台服務器遷移到另一台服務器的速度比任何其他方法都要快。
- 減少許多貢獻模塊的使用。
- 不需要用於從 Drupal 7 站點導出視圖 CSV 數據的視圖數據導出。
- 我們不需要用於遷移敏感信息(散列中的密碼)的視圖密碼字段,因為我們使用的是數據庫查詢。
- 由於我們使用的是 SQL 源,因此也不需要遷移源 CSV 模塊。
讓遷移過程開始!
在本博客中,我們將把用戶遷移到 Drupal 8 站點。 以下是我們遷移到 Drupal 8 將採取的步驟 -
1. 為遷移創建自定義模塊。
2. 引用源數據庫。
3. 定義遷移 YML 並映射已識別的 Drupal 字段。
4. 為遷移創建一個源插件。
5. 處理單值、多值和地址字段。
6. 使用 drush 命令行工具運行遷移。
步驟 1:為 Drupal 8 遷移創建自定義模塊。
首先,讓我們創建一個自定義模塊,就像您在 Drupal 8 中創建的一樣。查看此詳細博客以了解在 Drupal 8 中創建自定義模塊的信息。這裡我們將創建一個名為“公司員工遷移”的模塊。 模塊結構如下:

company_employee_migrate.info.yml :包含有關模塊及其依賴項的基本信息。
company_employee_migrate.install :這將用於編寫在安裝和卸載模塊時應觸發的 PHP 腳本。 在我們的例子中,我們在卸載模塊時刪除遷移配置。 有關腳本,請參閱以下屏幕截圖。

company_employee_migrate.module :這將用於定義站點的通用掛鉤。 這些是模塊所需的初始內容。 我們將在接下來的步驟中解釋其餘部分。
第二步:引用源數據庫
接下來,我們需要設置要從中提取數據的源數據庫。 通過移動到 webroot -> sites -> default -> settings.php 來更新你的 Drupal 站點的 settings.php 文件。
在默認連接下添加新的數據庫連接,如下面的屏幕截圖所示。 “ migrate ”是源數據庫的關鍵。

第 3 步:定義遷移 YML 並映射 Drupal 字段。
現在,我們需要確定要遷移的字段並在遷移 yml 中映射這些字段。 在此示例中,我們正在遷移用戶 ID、用戶名、密碼、電子郵件、狀態、創建的時間戳、名字、姓氏、工作角色、郵寄地址等。
確定字段後,我們需要在migrate_plus.migration.company_employee.yml定義遷移。 現在讓我們仔細看看遷移 yml 及其映射。

id:遷移 yml 的唯一 ID。
label:遷移的顯示名稱。
migration_group:遷移組名。
source:遷移源插件的註解名稱。 這將在src/Plugin/migrate/source/ CompanyEmployee.php 的 @MigrateSource 註釋中定義。
目的地:遷移目的地插件的名稱。 在這種情況下,它是 entity:user 因為我們正在遷移用戶實體。
過程:在過程中,我們將用源字段映射 Drupal 字段。 左側值是字段機器名稱,右側值是我們從源插件傳遞的字段名稱。
migration_dependencies:這是一個可選的鍵。 僅當對其他遷移有任何依賴性時才會使用此選項。
第 4 步:創建用於遷移的源插件
遷移源插件是 SQL 遷移的核心。 下面是源碼插件的詳細解釋。
- 源插件可以在src/Plugin/migrate/source/CompanyEmployee.php 創建
- 命名空間將是Drupal\company_employee_migrate\Plugin\migrate\source 。
- @MigrateSource註釋包括我們在遷移定義中映射的源插件 ID。
- 這裡我們擴展了核心 migrate 模塊提供的 Abstract SqlBase類。
請參閱以下屏幕截圖以供參考。


源插件必須實現以下三種方法——
query() :這將通過連接到源數據庫返回源字段數據。 請參閱下面的屏幕截圖,它將返回用戶 ID 大於 0 且用戶郵件以“@phyins.com”結尾的字段數據。

fields() :此方法將返回源中的可用字段。 下面,我添加了可用字段列表的代碼片段以及 baseFields()。

getIds() :此方法將返回源行的唯一 ID。 下面的代碼將返回一個整數類型的用戶 ID,因為 uid 對於每個用戶都是唯一的。

除了上面提到的這些方法,我們還有:
prepareRow() :此方法將針對每一行調用一次。 我們根據需求從不同的表和流程中加載數據。 我們使用$row->setSourceProperty創建的任何屬性都將在流程步驟中可用。 我們將使用 Drupal 8 DB 查詢來獲取prepareRow() 中的數據。
baseFields() :這將包含一個來自“users_field_data ”的基本字段數組,可供query()方法使用。 在下圖中找到代碼。

步驟 5:處理單值、多值和地址字段。
在 Drupal 中,我們有不同類型的字段,並且在遷移內容時處理某些字段對於開發人員來說可能會有些棘手。 我已經為下面的一些字段添加了代碼片段:
單值字段:這些字段包括文本字段、布爾字段、電子郵件等。找到下面的代碼片段以獲取單值字段; 這裡field_first_name可以設置如下。

多值字段:這些字段包括用戶角色、工作角色、多值選擇字段、複選框等。對於多值字段,我們需要返回一個關聯數組。 在下方找到“角色”字段的代碼片段。

地址字段:遷移地址模塊提供的地址字段與遷移其他字段幾乎沒有區別。 我們需要將查詢到的數據預處理為具有正確鍵的關聯數組,如下所示的field_mailing_address 。

現在通過在 Drupal 8 站點中安裝company_employee_migrate模塊來運行遷移。
第 6 步:使用 drush 命令行工具運行遷移
最後,我們已準備好進行 SQL 遷移。 要運行遷移,我們需要安裝 drush(如果您還沒有使用它)。
用於 Drupal 遷移的有用 drush 命令列表:
drush migrate-status :這將返回帶有詳細信息的遷移狀態。

drush migrate-import migration_id :這會將數據從源導入到站點。

drush migrate-reset-status migration_id :如果腳本的執行已經停止或暫停,遷移狀態將顯示為“正在導入”。 此命令會將遷移狀態重置為“空閒”,以便我們可以繼續進行遷移導入。

drush migrate-rollback migration_id :這將用於回滾到之前的狀態。
