Drupal - Lancer une migration dans le code

Voici comment lancer simplement une migration via le code, ici via une commande drush :

<?php
use Drupal\migrate\MigrateMessage;
use Drupal\migrate_tools\MigrateExecutable;

$manager = Drupal::service('plugin.manager.migration');
$migration = $manager->createInstance('ma_migration');

$executable = new MigrateExecutable($migration, new MigrateMessage());
$migrationResult = $executable->import();

 

Pour autoriser l'update il faut ajouter la ligne $migration->getIdMap()->prepareUpdate();

<?php
use Drupal\migrate\MigrateMessage;
use Drupal\migrate_tools\MigrateExecutable;

$manager = Drupal::service('plugin.manager.migration');
$migration = $manager->createInstance('ma_migration');
$migration->getIdMap()->prepareUpdate();

$executable = new MigrateExecutable($migration, new MigrateMessage());
$migrationResult = $executable->import();

 

On peut aussi passer des paramètres comme les sourceIds, pour ne mettre à jour que certains contenu qui ne s'étaient pas bien importé (et dont la destination était NULL dans la table de migration :

<?php
use Drupal\migrate\MigrateMessage;
use Drupal\migrate_tools\MigrateExecutable;

$results = \Drupal::database()->query('select sourceid1, sourceid2 from {migrate_map_ma_migration} where destid1 IS NULL')->fetchAllAssoc('sourceid1');

$manager = Drupal::service('plugin.manager.migration');
$migration = $manager->createInstance('ma_migration');
$migration->getIdMap()->prepareUpdate();

foreach ($results as $result) {
  $executable = new MigrateExecutable(
    $migration,
    new MigrateMessage(),
    [
      'idlist' => $result->sourceid1 . ':' . $result->sourceid2,
    ]
  );
  $migrationResult = $executable->import();
}

 

Contenus en rapport

Ajouter un commentaire

Ne sera pas publié
CAPTCHA
Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...