J'utilise le module Migrate pour une migration D7 vers D8 et j'écris toute la migration manuellement dans le code (plutôt que d'utiliser le module de migration D7 intégré, car je voulais un contrôle plus granulaire de la migration.)
J'ai la structure suivante: le site D7 a un champ d'image où les images sont stockées en tant qu'entités de fichier. Sur le site D8, le champ image est une référence d'entité à une entité média (et l'entité média à son tour a un champ image).
À l'origine, j'avais les éléments suivants pour ma migration d'images:
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
Dans mon fichier de migration de nœud d'article, j'avais les éléments suivants:
'field_article_image/target_id':
plugin: migration
migration: image_files
source: field_article_image
mais j'ai réalisé que cela ne fonctionnerait pas. L'ID cible provenant de la migration des fichiers image était en fait des ID d'entité de fichier, et non des ID d'entité multimédia. Dans le monde idéal, j'aimerais trouver un moyen de créer une troisième migration, qui créerait cette étape intermédiaire, et migrerait les entités de fichier dans les entités multimédias, puis mapperait cette migration vers la migration des articles. Cependant, je ne peux pas trouver une bonne façon de procéder.
Le plan B consistera simplement à créer un plug-in de processus pour la migration des images, qui créera manuellement des entités de fichier, les joindra aux entités multimédias et passera cette migration aux articles (cela supprime l'étape intermédiaire). Cela signifierait, cependant, que même si les entités multimédias peuvent être annulées, les entités de fichiers ne le peuvent pas.