Korzystam z modułu migracji do migracji z D7 na D8 i piszę całą migrację ręcznie w kodzie (zamiast używać wbudowanego modułu migracji D7, ponieważ chciałem bardziej szczegółowej kontroli nad migracją).
Mam następującą strukturę: strona D7 ma pole obrazu, w którym obrazy są przechowywane jako byty plików. W witrynie D8 pole obrazu jest odniesieniem do obiektu Media (a obiekt Media z kolei ma pole Image).
Początkowo miałem do migracji obrazy:
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
W moim pliku migracji węzła artykułu miałem następujące elementy:
'field_article_image/target_id':
plugin: migration
migration: image_files
source: field_article_image
ale zdałem sobie sprawę, że to nie zadziała. Identyfikator target pochodzący z migracji image_files był naprawdę identyfikatorem jednostki pliku, a nie identyfikatorem jednostki medialnej. W idealnym świecie chciałbym znaleźć sposób na utworzenie trzeciej migracji, która stworzyłaby ten środkowy krok i migrował by podmioty plików do encji medialnych, a następnie zamapował tę migrację na migrację artykułów. Jednak nie mogę znaleźć dobrego sposobu na zrobienie tego.
Plan B będzie polegał po prostu na stworzeniu wtyczki procesowej do migracji obrazów, która ręcznie utworzy encje plików, przyczepi je do encji medialnych i przekaże tę migrację do artykułów (usuwa to środkowy krok). Oznaczałoby to jednak, że chociaż encje multimedialne można wycofać, encje plików nie mogą.