Estou usando o módulo Migrate para uma migração D7 para D8 e estou escrevendo toda a migração manualmente no código (em vez de usar o módulo de migração D7 interno, pois queria um controle mais granual na migração).
Eu tenho a seguinte estrutura: o site D7 tem um campo de imagem onde as imagens são armazenadas como entidades de arquivo. No site D8, o campo de imagem é uma referência de entidade para uma entidade de Mídia (e a entidade de Mídia, por sua vez, possui um campo de Imagem).
Originalmente, eu tinha o seguinte para minha migração de imagens:
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
No arquivo de migração do nó do artigo, eu tinha o seguinte:
'field_article_image/target_id':
plugin: migration
migration: image_files
source: field_article_image
mas percebi que isso não funcionaria. O target_id proveniente da migração de image_files era realmente um ID de entidade de arquivo, não um ID de entidade de mídia. No mundo ideal, eu gostaria de encontrar uma maneira de criar uma terceira migração, que criaria essa etapa intermediária, e migrar entidades de arquivo para entidades de mídia e, em seguida, mapear essa migração para a migração de artigos. No entanto, não consigo descobrir uma boa maneira de fazer isso.
O plano B será simplesmente criar um plug-in de processo para a migração de imagens, que criará manualmente entidades de arquivo, anexará-as a entidades de mídia e passará essa migração para o Articles (isso remove a etapa intermediária). Isso significaria, porém, que, embora as entidades de Mídia possam ser revertidas, as Entidades de Arquivo não podem.