D7からD8への移行に移行モジュールを使用しており、移行全体をコードで手動で記述しています(移行をより細かく制御するため、組み込みのD7移行モジュールを使用するのではありません)。
私は次のような構造になっています。D7サイトには、画像がファイルエンティティとして保存される画像フィールドがあります。D8サイトでは、画像フィールドはメディアエンティティへのエンティティ参照です(メディアエンティティには画像フィールドがあります)。
もともと、私は私のイメージの移行のために以下を持っていました:
id: image_files
source:
plugin: legacy_images
constants:
source_base_path: http://example.com/
destination:
plugin: 'entity:file'
process:
fid: fid
filename: filename
source_full_path:
-
plugin: concat
delimiter: /
source:
- constants/source_base_path
- uri
-
plugin: urlencode
uri:
plugin: file_copy
source:
- '@source_full_path'
- uri
filemime: filemime
status: status
記事ノードの移行ファイルには、次のものが含まれていました。
'field_article_image/target_id':
plugin: migration
migration: image_files
source: field_article_image
しかし、これはうまくいかないことに気づきました。image_filesマイグレーションからのtarget_idは、実際にはメディアエンティティIDではなく、ファイルエンティティIDでした。理想的な世界では、この中間のステップを作成し、ファイルエンティティをメディアエンティティに移行し、その移行を記事の移行にマッピングする3番目の移行を作成する方法を見つけたいと思います。しかし、私はこれを行う良い方法を理解できません。
プランBは、イメージの移行用のプロセスプラグインを作成するだけです。これにより、手動でファイルエンティティが作成され、メディアエンティティにアタッチされ、その移行がArticlesに渡されます(これにより、中央のステップが削除されます)。ただし、メディアエンティティはロールバックできますが、ファイルエンティティはロールバックできませんでした。