Dacă vă înțeleg corect întrebarea și este într-adevăr o eroare (astfel încât să nu existe o soluție adecvată pentru problema dvs.), mă pot gândi la cel puțin 2 moduri în care puteți rezolva acest lucru.
1. hook_migrate_prepare_row / hook_migrate_MIGRATION_ID_prepare_row
Ai putea folosi hook_migrate_prepare_row sau hook_migrate_MIGRATION_ID_prepare_row pentru a preprocesa datele sursă și a prelua manual uid-ul și ID-ul profilului, ceva de genul acesta:
/**
* Implementează hook_migrate_MIGRATE_ID_prepare_row().
*/
funcția my_module_migrate_MIGRATE_ID_prepare_row(Rând $rând, MigrateSourceInterface $sursă, MigrationInterface $migrare) {
$raw_data = (obiect) $row->getSource()['raw'];
// Aici interogările bazei de date sunt necesare.
// $uid = \Drupal::database()->select...
// $profile_id = \Drupal::database()->selectați...
$row->setSourceProperty('uid', $uid);
$row->setSourceProperty('profile_id', $profile_id);
}
Rețineți că Migrare Plus oferă o alternativă orientată pe obiecte la aceste cârlige: https://www.drupal.org/docs/upgrading-drupal/customize-migrations-when-upgrading-to-drupal-8-or-later#s-migrate-plus-provides-a-prepare-row-event
2. Scrieți propriul plugin de proces
Există o documentație bună despre cum să scrieți un plugin de proces pe drupal.org: https://www.drupal.org/docs/8/api/migrate-api/migrate-process/writing-a-process-plugin
Practic arată așa:
<?php
spațiu de nume Drupal\modulul_meu\Plugin\migrate\process;
utilizați Drupal\migrate\ProcessPluginBase;
utilizați Drupal\migrate\MigrateExecutableInterface;
utilizați Drupal\migrate\Row;
/**
* Oferă un plugin pentru procesul de migrare „ExtractProfileIdFromLau”.
*
* @MigrateProcessPlugin(
* id = "extract_profile_id_from_lau"
* )
*/
clasa ExtractProfileIdFromLau extinde ProcessPluginBase {
/**
* {@inheritdoc}
*/
Transformare funcție publică ($valoare, MigrateExecutableInterface $migrate_executable, Rând $rând, $proprietate_destinație) {
// Preluați id-ul profilului.
$profile_id = \Drupal::database()->selectați...
returnează $profile_id;
}
}
Și poate fi referit în fișierul migration.yml sub proces
secțiune, ceva de genul acesta, de exemplu:
proces:
profile_id:
-
plugin: extract_profile_id_from_lau
sursa: lau
Nu sunt sigur în ce mod ar funcționa cel mai bine pentru dvs., dar acestea sunt cele 2 idei care v-ar veni în minte. Cel putin asa as incerca eu.