如何通过 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 ”是源数据库的关键。

Drupal 模块

第 3 步:定义迁移 YML 并映射 Drupal 字段。

现在,我们需要确定要迁移的字段并在迁移 yml 中映射这些字段。 在此示例中,我们正在迁移用户 ID、用户名、密码、电子邮件、状态、创建的时间戳、名字、姓氏、工作角色、邮寄地址等。

确定字段后,我们需要在migrate_plus.migration.company_employee.yml定义迁移。 现在让我们仔细看看迁移 yml 及其映射。

迁移 YML 和 Map

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 对于每个用户都是唯一的。

Drupal 模块

除了上面提到的这些方法,我们还有:

prepareRow() :此方法将针对每一行调用一次。 我们根据需求从不同的表和流程中加载数据。 我们使用$row->setSourceProperty创建的任何属性都将在流程步骤中可用。 我们将使用 Drupal 8 DB 查询来获取prepareRow() 中的数据。

baseFields() :这将包含一个来自“users_field_data ”的基本字段数组,可供query()方法使用。 在下图中找到代码。

drupal 8 迁移

步骤 5:处理单值、多值和地址字段。

在 Drupal 中,我们有不同类型的字段,并且在迁移内容时处理某些字段对于开发人员来说可能会有些棘手。 我已经为下面的一些字段添加了代码片段:

单值字段:这些字段包括文本字段、布尔字段、电子邮件等。找到下面的代码片段以获取单值字段; 这里field_first_name可以设置如下。

处理单值


多值字段:这些字段包括用户角色、工作角色、多值选择字段、复选框等。对于多值字段,我们需要返回一个关联数组。 在下方找到“角色”字段的代码片段。

移民


地址字段:迁移地址模块提供的地址字段与迁移其他字段几乎没有区别。 我们需要将查询到的数据预处理为具有正确键的关联数组,如下所示的field_mailing_address

移民


现在通过在 Drupal 8 站点中安装company_employee_migrate模块来运行迁移。

第 6 步:使用 drush 命令行工具运行迁移

最后,我们已准备好进行 SQL 迁移。 要运行迁移,我们需要安装 drush(如果您还没有使用它)。

用于 Drupal 迁移的有用 drush 命令列表:

drush migrate-status :这将返回带有详细信息的迁移状态。

使用 drush 迁移

drush migrate-import migration_id :这会将数据从源导入到站点。

突如其来的迁移

drush migrate-reset-status migration_id :如果脚本的执行已经停止或暂停,迁移状态将显示为“正在导入”。 此命令会将迁移状态重置为“空闲”,以便我们可以继续进行迁移导入。

突如其来的迁移

drush migrate-rollback migration_id :这将用于回滚到之前的状态。

突如其来的迁移