Maison >développement back-end >tutoriel php >Votre première migration Drupal 8
Migration Drupal 8: une plongée profonde dans le transfert de contenu
Le module Migrate est une pierre angulaire de l'écosystème Drupal, à tel point que Core Drupal 8 a intégré certaines de ses fonctionnalités. Cela a été crucial pour remplacer les mises à niveau traditionnelles par des migrations de contenu et de configuration de Drupal 6 et 7 à Drupal 8. Alors que Core comprend désormais le cadre de base (dans le module migrate
) et les outils de mise à niveau Drupal 6/7 (dans migrate_drupal
), De nombreuses caractéristiques essentielles restent dans les modules contribués. Migrate Tools
est particulièrement important, la fourniture de commandes DRUSH et une interface utilisateur pour la gestion des migrations. De plus, des modules comme Migrate Source CSV
, Migrate Source XML
et Migrate Source JSON
offrent des plugins pour les sources de données courantes.
Cet article démontre la migration de Drupal 8 en important du contenu dans des entités de nœuds. Pour plus de simplicité, nous utiliserons des tables de base de données dans l'installation de Drupal. Le code complet est disponible dans [ce référentiel] (link_to_repository_here - remplacer par un lien réel si disponible).
Concepts clés:
Migrate Tools
est vital pour l'exécution de migrations via Dush (la méthode recommandée). Des commandes comme drush migrate-import --all
et drush migrate-rollback --all
Contrôlez le processus. Architecture de migration:
Une migration Drupal 8 utilise le système de plugin. Le plugin source fournit des données brutes, les plugins de processus le transforment et les plugins de destination les enregistrent dans des entités Drupal. Ce pipeline est défini dans une entité de configuration de migration (généralement la configuration du module, importée sur l'activation du module).
Exemple: Migration de film
Notre exemple implique deux tables de base de données: movies
(id, nom, description) et movies_genres
(id, film_id, nom). Le script MySQL suivant crée ces tables et les remplit avec des exemples de données:
<code class="language-sql">CREATE TABLE `movies` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `description` text, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; CREATE TABLE `movies_genres` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `movie_id` int(11) DEFAULT NULL, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; INSERT INTO `movies` (`id`, `name`, `description`) VALUES (1, 'Big Lebowsky', 'My favorite movie, hands down.'), (2, 'Pulp fiction', 'Or this is my favorite movie?'); INSERT INTO `movies_genres` (`id`, `movie_id`, `name`) VALUES (1, 1, 'Comedy'), (2, 1, 'Noir'), (3, 2, 'Crime');</code>
L'objectif est de migrer les films en nœuds et genres d'articles en termes de taxonomie (vocabulaire des tags), en maintenant l'association de films de films.
Migration de genre (migrate.migration.genres.yml
):
<code class="language-yaml">id: genres label: Genres migration_group: demo source: plugin: genres key: default destination: plugin: entity:taxonomy_term process: vid: plugin: default_value default_value: tags name: name</code>
Le plugin source Genres.php
(situé dans Plugin/migrate/source
) définit la requête SQL, les champs et les ids.
Migration du film (migrate.migration.movies.yml
):
<code class="language-sql">CREATE TABLE `movies` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `description` text, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; CREATE TABLE `movies_genres` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `movie_id` int(11) DEFAULT NULL, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; INSERT INTO `movies` (`id`, `name`, `description`) VALUES (1, 'Big Lebowsky', 'My favorite movie, hands down.'), (2, 'Pulp fiction', 'Or this is my favorite movie?'); INSERT INTO `movies_genres` (`id`, `movie_id`, `name`) VALUES (1, 1, 'Comedy'), (2, 1, 'Noir'), (3, 2, 'Crime');</code>
Le plugin Source Movies.php
utilise prepareRow()
pour ajouter un champ «Genres» contenant des identifiants de genre.
Activation et exécution:
Migrate Tools
. migrate-status
, migrate-import --all
, migrate-rollback --all
). Conclusion:
Cet exemple illustre les capacités de migration de Drupal 8. Explorez différents plugins source, plugins de processus et le potentiel de solutions personnalisées pour gérer divers besoins de migration.
Questions fréquemment posées (FAQ): (celles-ci sont largement inchangées de l'entrée, car elles sont factuelles et pertinentes.)
N'oubliez pas de remplacer "link_to_repository_here"
par le lien réel si vous en avez un.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!