Altering data during a Drupal 8 Migration
Under Review 230530
Occasionally you may need to change up the data as it is migrating from your D6 / D7 site to your D8 site. Â This is common especially in the case of migrating a Date field.
You can alter a data by extending the ProcessPluginBase and using the transform method.
You should of run the drush version of custom migration and created a module.  We will need to edit one of the config YML files.
In this case we are changing the node import which is usual identified like:Â migrate_plus.migration.upgrade_d7_node_YOURTYPE.yml
We are going to change our date field in the yml from:
field_CUSTOM_DATE: field_CUSTOM_DATE
We are changing the process handler to:
field_CUSTOM_DATE: plugin: fix_date source: field_CUSTOM_DATE
In your custom migration module create the following folder path: src/Plugin/migrate/process
Create a file in the new folder called FixDate.php and put this code in:
<?php namespace Drupal\YOUR-CUSTOM-MODULE\Plugin\migrate\process; use Drupal\migrate\MigrateException; use Drupal\migrate\MigrateExecutableInterface; use Drupal\migrate\ProcessPluginBase; use Drupal\migrate\Row; /** * Convert a date field to the proper format. * * @MigrateProcessPlugin( * id = "fix_date", * ) */ class FixDate extends ProcessPluginBase { /** * {@inheritdoc} */ public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) { try { if (is_numeric($value)) { $date = new \DateTime(); $date->setTimestamp($value); } elseif (is_array($value)) { $value = implode(',', $value); $date = new \DateTime($value); } else { $date = new \DateTime($value); } $value = $date->format('Y-m-d\TH:i:s'); } catch (\Exception $e) { throw new MigrateException('Invalid source date.'); } return $value; } }
Review History
Who | When | Status |
---|---|---|
 |  |  |
Bob | 20230530 | Requested someone to review in Slack. I don’t have recent expertise. |