D7에서 D8 로의 마이그레이션에 Migrate 모듈을 사용하고 있으며 마이그레이션에 대한보다 세부적인 제어를 원했기 때문에 내장 된 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였습니다. 이상적인 세계에서는이 중간 단계를 생성하고 파일 엔터티를 미디어 엔터티로 마이그레이션 한 다음 마이그레이션을 기사 마이그레이션에 매핑하는 세 번째 마이그레이션을 만드는 방법을 찾고 싶습니다. 그러나 나는 이것을하는 좋은 방법을 알 수 없습니다.
계획 B는 이미지 마이그레이션을위한 프로세스 플러그인을 만드는 것입니다. 이미지 마이그레이션은 수동으로 파일 엔터티를 생성하고 미디어 엔터티에 첨부 한 다음 해당 마이그레이션을 기사로 전달합니다 (이는 중간 단계를 제거함). 그러나 미디어 엔터티는 롤백 할 수 있지만 파일 엔터티는 롤백 할 수 없습니다.