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_reference
和 user_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 中的实体引用的顺序过程
我尝试按照以下步骤将 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_reference
和 user_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 中的实体引用的顺序过程