Comment migrer vers Drupal 8 à partir d'une source SQL en 6 étapes simples

Publié: 2020-11-24

On a beaucoup parlé de l'importance et des avantages de la migration vers Drupal 8. La migration vers Drupal est la partie la plus importante d'un workflow de développement. Nous devons nous assurer que le contenu est transféré de manière transparente sans perdre les informations et données critiques des utilisateurs. Consultez ce guide complet pour une migration réussie de Drupal 7 vers Drupal 8.

Il existe plusieurs façons de migrer vers Drupal 8 en utilisant diverses sources. Nous avons déjà expliqué comment migrer de CSV vers Drupal 8. Les autres sources incluent SQL, XML, JSON, etc. Dans ce blog, nous discuterons de la migration vers Drupal 8 en utilisant SQL comme source.

Migration

Pourquoi SQL ?

Bien que le choix de la source de données dépende en grande partie de la source des données existantes à migrer, certaines des autres raisons courantes de choisir la source SQL pour une migration Drupal 8 sont :

  • Il est facile d'écrire des requêtes pour obtenir les données requises en se connectant à la base de données.
  • La migration des données d'un serveur à un autre sera plus rapide que toute autre méthode.
  • Réduit l'utilisation de nombreux modules contribués.
  • Pas besoin d'export de données de vues qui est utilisé pour exporter des données CSV de vues à partir de sites Drupal 7.
  • Nous n'aurons pas besoin du champ de mot de passe Views qui est utilisé pour la migration des informations sensibles (mots de passe en hachage), puisque nous utilisons une requête DB.
  • Migrer le module CSV source n'est pas non plus nécessaire puisque nous utilisons la source SQL.

Que le processus de migration commence !

Dans ce blog, nous allons migrer les utilisateurs vers un site Drupal 8. Voici les étapes que nous allons suivre pour migrer vers Drupal 8 -
1. Créez un module personnalisé pour la migration.
2. Référencez la base de données source.
3. Définissez le YML de migration et mappez les champs Drupal identifiés.
4. Créez un plug-in source pour la migration.
5. Traitez les champs à valeur unique, à valeurs multiples et d'adresse.
6. Exécutez la migration à l'aide de l'outil de ligne de commande drush.

Étape 1 : Créez un module personnalisé pour la migration vers Drupal 8.

Tout d'abord, créons un module personnalisé comme vous le créez dans Drupal 8. Consultez ce blog détaillé pour créer des modules personnalisés dans Drupal 8. Ici, nous créons un module appelé « migration des employés de l'entreprise ». La structure des modules est la suivante :

module personnalisé

company_employee_migrate.info.yml : contient des informations de base concernant le module et ses dépendances.

company_employee_migrate.install : Ceci sera utilisé pour écrire des scripts PHP qui devraient se déclencher lors de l'installation et de la désinstallation du module. Dans notre cas, nous supprimons la configuration de migration lors de la désinstallation du module. Voir la capture d'écran ci-dessous pour le script.

Base de données source

company_employee_migrate.module : Ceci sera utilisé pour définir les crochets généraux pour le site. Ce sont les premières choses nécessaires pour le module. Nous expliquerons le reste dans les prochaines étapes.

Étape 2 : référencer la base de données source

Ensuite, nous devons configurer la base de données source à partir de laquelle nous extrayons les données. Mettez à jour le fichier settings.php de votre site Drupal en vous déplaçant vers webroot -> sites -> default -> settings.php .

Ajoutez la nouvelle connexion à la base de données sous la connexion par défaut, comme indiqué dans la capture d'écran ci-dessous. « migrer » est la clé de la base de données source.

Module Drupal

Étape 3 : Définissez le YML de migration et mappez les champs Drupal.

Maintenant, nous devons identifier les champs que nous voulons migrer et mapper ces champs dans le fichier yml de migration. Dans cet exemple, nous migrons l'ID utilisateur, le nom d'utilisateur, le mot de passe, l'e-mail, le statut, l'horodatage de création, le prénom, le nom, le rôle, l'adresse postale, etc.

Après l'identification des champs, nous devons définir la migration à migrate_plus.migration.company_employee.yml . Examinons maintenant de plus près la migration yml et leurs mappages.

Migration YML et carte

id : identifiant unique pour la migration yml.

label : nom d'affichage de la migration.

migration_group : nom du groupe de migration.

source : Annotation Nom du plugin source de migration. Cela sera défini dans l'annotation @MigrateSource dans src/Plugin/migrate/source/CompanyEmployee.php .

destination : nom du plug-in de destination de la migration. Dans ce cas, il s'agit de entity:user puisque nous migrons l'entité utilisateur.

process : dans le processus, nous allons mapper les champs Drupal avec les champs source. Les valeurs de gauche sont les noms de machine de champ et les valeurs de droite sont les noms de champ que nous transmettons depuis le plugin source.

migration_dependencies : il s'agit d'une clé facultative. Cela ne sera utilisé que s'il existe une dépendance vis-à-vis d'autres migrations.

Étape 4 : Créer un plug-in source pour la migration

Le plugin de source de migration est le cœur de la migration SQL. Vous trouverez ci-dessous l'explication détaillée du plugin source.

  • Le plugin source peut être créé sur src/Plugin/migrate/source/CompanyEmployee.php
  • L'espace de noms sera Drupal\company_employee_migrate\Plugin\migrate\source .
  • Les annotations @MigrateSource incluent l'identifiant du plug-in source que nous mappons dans la définition de migration.
  • Ici, nous étendons la classe Abstract SqlBase fournie par le module central de migration.

Voir la capture d'écran ci-dessous pour référence.

plugin source pour la migration

Le plugin source doit implémenter les trois méthodes suivantes -

query() : Cela renverra les données des champs source en se connectant à la base de données source. Voir la capture d'écran ci-dessous qui renverra les données de champ où l'identifiant de l'utilisateur est supérieur à 0 et le courrier de l'utilisateur se termine par "@phyins.com".

plugin source pour la migration


fields() : Cette méthode renverra les champs disponibles dans la source. Ci-dessous, j'ai ajouté l'extrait de code pour la liste des champs disponibles avec le baseFields().

champs de base

getIds() : cette méthode renverra un identifiant unique pour la ligne source. Le code ci-dessous renverra un identifiant d'utilisateur de type entier puisque l'uid sera unique pour chaque utilisateur.

Module Drupal

Outre ces méthodes mentionnées ci-dessus, nous avons également :

prepareRow() : Cette méthode sera appelée une fois pour chaque ligne. Nous chargeons ici les données à partir de différentes tables et processus en fonction des besoins. Toute propriété que nous créons à l'aide de $row->setSourceProperty sera disponible dans l'étape du processus. Nous utiliserons la requête Drupal 8 DB pour obtenir les données dans prepareRow() .

baseFields() : Cela contiendra un tableau de champs de base de « users_field_data » qui peuvent être utilisés par la méthode query() . Trouvez le code dans l'image ci-dessous.

drupal 8 migrer

Étape 5 : Traitez les champs à valeur unique, à valeurs multiples et d'adresse.

Dans Drupal, nous avons différents types de champs et le traitement de certains champs peut devenir un peu délicat pour les développeurs lors de la migration de contenu. J'ai ajouté les extraits de code pour certains champs ci-dessous :

Champs à valeur unique : ces champs incluent les champs de texte, les champs booléens, les e-mails, etc. Trouvez l'extrait de code ci-dessous pour obtenir un champ à valeur unique ; ici, le field_first_name peut être défini comme ci-dessous.

Traiter une valeur unique


Champs à valeurs multiples : ces champs incluent les rôles d'utilisateur, les rôles de travail, les champs de sélection à valeurs multiples, les cases à cocher, etc. Pour un champ à valeurs multiples, nous devons renvoyer un tableau associatif. Trouvez ci-dessous l'extrait de code pour le champ « rôles ».

Migration


Champs d'adresse : La migration du champ d'adresse fourni par le module d'adresse sera peu différente de la migration d'autres champs. Nous devons prétraiter les données interrogées dans un tableau associatif avec les clés appropriées, comme indiqué ci-dessous pour field_mailing_address .

Migration


Maintenant, tout est prêt pour exécuter la migration en installant le module company_employee_migrate dans le site Drupal 8.

Étape 6 : Exécutez la migration à l'aide de l'outil de ligne de commande drush

Enfin, nous sommes prêts pour notre migration SQL. Pour exécuter la migration, nous devons installer drush (si vous ne l'utilisez pas déjà).

Liste des commandes drush utiles pour la migration Drupal :

drush migrate-status : Cela renverra le statut de la migration avec des détails.

migration à l'aide de drush

drush migrate-import migration_id : Cela importera les données de la source vers le site.

migration rapide

drush migrate-reset-status migration_id : Si l'exécution du script s'est arrêtée ou suspendue, l'état de la migration s'affichera comme « Importation ». Cette commande réinitialisera l'état de la migration sur « Idle » afin que nous puissions procéder à l'importation de la migration.

migration rapide

drush migrate-rollback migration_id : Ceci sera utilisé pour revenir à son état précédent.

migration rapide