Drupal 7サイトをDrupal 8サイトに移行します。移行用のモジュールをすでに作成しており、タイトルのあるコンテンツタイプがあります。 、field_pictureおよびfield_text in Drupal 7。
Drupal 8に移行したいのですが、field_text = field_descriptionで、field_pictureはfield_imageです。
私は以下を試しました:
id: drupal7_fruit
label: "Test migration"
migration_group: drupal7
source:
plugin: d7_node
node_type: fruit
process:
nid: nid
vid: vid
langcode:
plugin: default_value
source: language
default_value: und
title: title
uid: node_uid
status: status
created: created
changed: changed
promote: promote
sticky: sticky
revision_uid: revision_uid
revision_log: log
revision_timestamp: timestamp
field_description: field_text
field_image:
plugin: iterator
source: field_picture
process:
target_id: fid
alt: alt
title: title
width: width
height: height
destination:
plugin: 'entity:node'
default_bundle: fruit
migration_dependencies: {}
説明とタイトルは移行できましたが、画像は移行されません。
何が悪いのですか?
編集
migrate_plus.migration.drupal7_fruit.yml
id: drupal7_fruit
label: "Migrate Fruit Content Type"
migration_group: drupal7
source:
plugin: d7_node
node_type: fruit
process:
nid: nid
vid: vid
langcode:
plugin: default_value
source: language
default_value: und
title: title
uid: node_uid
status: status
created: created
changed: changed
promote: promote
sticky: sticky
revision_uid: revision_uid
revision_log: log
revision_timestamp: timestamp
field_descricao: field_body
destination:
plugin: 'entity:node'
default_bundle: fruit
migration_dependencies:
optional: drupal7_image
migrate_plus.migration.drupal7_image.yml
id: drupal7_image
label: Images
migration_tags:
- Drupal 7
source:
plugin: d7_file
constants:
source_base_path: ''
process:
fid: fid
filename: filename
source_full_path:
-
plugin: concat
delimiter: /
source:
- constants/source_base_path
- filepath
-
plugin: urlencode
uri:
plugin: file_copy
source:
- '@source_full_path'
- uri
filemime: filemime
status: status
created: timestamp
changed: timestamp
uid: uid
destination:
plugin: entity:file
コメントの @ Berdir がコメントで編集したのは、イメージまたはファイルには別の移行ファイルが必要であるにもかかわらず、イメージを移行できないとのことです。 D8サイトデータベースを復元して、すべてを最初からやり直しました。
Berdirの助力に感謝しますが、drupal7_fruit移行ファイルに、field_imageの値や移行の依存関係など、いくつかの情報が欠けていることに気付きました。
実用的なソリューション:
migrate_plus.migration.drupal7_image.yml
id: drupal7_image
label: Images
migration_group: drupal7
migration_tags:
- Drupal 7
source:
plugin: d7_file
constants:
source_base_path: '/var/www/username/drupal7/' # Full location of your drupal7 site
process:
fid: fid
filename: filename
source_full_path:
-
plugin: concat
delimiter: /
source:
- constants/source_base_path
- filepath
-
plugin: urlencode
uri:
plugin: file_copy
source:
- '@source_full_path'
- uri
filemime: filemime
status: status
created: timestamp
changed: timestamp
uid: uid
destination:
plugin: entity:file
migration_dependencies: {}
migration_plus.migration.drupal7_fruit.yml
id: drupal7_fruta
label: "Migrate Fruit Content Type"
migration_group: drupal7
migration_tags:
- Drupal 7
source:
plugin: d7_node
node_type: fruit
process:
nid: nid
vid: vid
langcode:
plugin: default_value
source: language
default_value: und
title: title
uid: node_uid
status: status
created: created
changed: changed
promote: promote
sticky: sticky
revision_uid: revision_uid
revision_log: log
revision_timestamp: timestamp
field_description: field_body
field_image: # Image field name in Drupal 8 site
plugin: iterator
source: field_photo # Image field name in Drupal 7 site
process:
target_id: fid
alt: alt
title: title
width: width
height: height
destination:
plugin: 'entity:node'
default_bundle: fruit
migration_dependencies:
required:
- drupal7_image
これが将来同じ問題を抱える人を助けることを願っています!
画像とファイルは独自のエンティティタイプです。ノードテーブルには、ファイルID、基本的にはエンティティ参照のみが含まれます。
最初に実行する必要がある別のファイル移行が必要です。 d7_file移行テンプレートに基づいて作成できます。
注:既存のnidとvid(およびfid)を移行する場合、D8サイトに競合するIDを持つ既存のデータがないことを確認する必要があります。そうしないと競合が発生します。それらを省略すると、コンテンツを手動で作成する場合と同様に、自動インクリメントIDが自動的に使用されます。ただし、移行プロセスプラグインを設定して、古いファイルIDを新しいファイルIDにマップする必要があります。