Я використовую модуль Migrate для міграції від 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
але я зрозумів, що це не вийде. Цільовий_id, що походить від міграції image_files, насправді був ідентифікатором файлової сутності, а не ідентифікатором медіа-суті. В ідеальному світі я хотів би знайти спосіб створення третьої міграції, яка створила б цей середній крок, і переміщення сутностей файлів у медіа-об'єкти, а потім відобразити цю міграцію до міграції статей. Однак я не можу розібратися, як це зробити.
План B буде просто створити плагін процесу для міграції зображень, який вручну створюватиме файлові об'єкти, приєднувати їх до медіа-об'єктів та передавати цю міграцію в статті (це видаляє середній крок). Це означає, що, хоча медіа-об'єкти можна повернути назад, файлові об'єкти не могли.