Drupal 8 - 节点引用迁移到实体引用类型

Drupal 8 - Node reference migrate to entity reference type

我尝试按照以下步骤将 drupal 7 站点迁移到版本 8 https://www.drupal.org/docs/8/upgrade/upgrading-from-drupal-6-or-7-to-drupal-8。但是当迁移内容类型的字段时,我在引用其他内容类型的字段中出现这种类型的错误 "Attempt to create a [field_name] with no type."。 "upgrade_d7_field" 是我执行的迁移id。我正在通过 drush 进行迁移。

我知道可能的问题,但我不知道如何解决。在 drupal 7 中,引用其他内容类型的字段类型是 "Node reference" 类型,但在版本 8 中该类型不再存在,现在是 "entity reference".

类型

我认为我应该更改我的迁移定义中的一些配置,但我不知道具体是什么。

这是迁移 id 的迁移定义 "upgrade_d7_field":

uuid: 2edaccb2-22a6-4482-895f-439bbbc66f1a
langcode: es
status: true
dependencies: {  }
id: upgrade_d7_field
class: Drupal\migrate_drupal\Plugin\migrate\FieldMigration
field_plugin_method: alterFieldMigration
cck_plugin_method: null
migration_tags:
  - 'Drupal 7'
  - Configuration
migration_group: migrate_drupal_7
label: 'Field configuration'
source:
  plugin: d7_field
  constants:
    status: true
    langcode: und
process:
  entity_type:
    -
      plugin: get
      source: entity_type
  status:
    -
      plugin: get
      source: constants/status
  langcode:
    -
      plugin: get
      source: constants/langcode
  field_name:
    -
      plugin: get
      source: field_name
  type:
    -
      plugin: process_field
      source: type
      method: getFieldType
      map:
        d7_text:
          d7_text: d7_text
        taxonomy_term_reference:
          taxonomy_term_reference: taxonomy_term_reference
        image:
          image: image
        link_field:
          link_field: link_field
        file:
          file: file
        datetime:
          datetime: datetime
        list:
          list: list
  cardinality:
    -
      plugin: get
      source: cardinality
  settings:
    -
      plugin: d7_field_settings
destination:
  plugin: 'entity:field_storage_config'
migration_dependencies:
  required: {  }
  optional: {  }


说真的,我需要迁移 D7 站点的数据,它们有超过 17.000 条新闻,包括分类法、评论等。

感谢您的帮助。提前致谢。

您似乎正在使用 References 模块,该模块提供旧 CCK 包中 node_referenceuser_reference 字段类型的 D7 版本。

这个模块是在 drupal 7 早期启用这些字段类型的解决方案。

一段时间后,Entity Reference 出现在 d7 中,它提供了一个通用的字段类型来引用任意实体,并从那时起就包含在 Drupal 8 核心中。

要解决您的问题,您应该首先将参考字段迁移到正确的字段类型 entity_reference

有一个名为 Reference to EntityReference Field Migration 的模块可以帮助您在迁移 drupal 8 之前完成这项工作。

假设 d7 字段位于名为 publications 的内容类型上,并且该字段 field_articles_d7 引用名为 [=12= 的内容类型] 并且新的 D8 实体引用字段称为 field_articles_d8(假设这是在称为 publications 的相同内容类型上)也引用称为 [=12 的内容类型=]

顺序应该是

  • 迁移 article 内容类型(迁移 ID:d7_node_article)
  • 然后迁移 publications 节点类型(迁移 ID:d7_node_publication)
    • 在流程部分你需要这样做
      •         field_articles_d8:
                    plugin: migration_lookup
                    migration: d7_node_article
                    source: field_articles_d7
        
        

这通常是将 Drupal 7 中的节点引用迁移到 Drupal 8 中的实体引用的顺序过程