Если я правильно понимаю ваш вопрос и это действительно ошибка (так что нет правильного решения вашей проблемы), я могу придумать как минимум два способа обойти это.
1. hook_migrate_prepare_row / hook_migrate_MIGRATION_ID_prepare_row
Вы могли бы использовать hook_migrate_prepare_row или же hook_migrate_MIGRATION_ID_prepare_row для предварительной обработки ваших исходных данных и получения uid и идентификатора профиля вручную, примерно так:
/**
* Реализует hook_migrate_MIGRATE_ID_prepare_row().
*/
function my_module_migrate_MIGRATE_ID_prepare_row (строка $ row, MigrateSourceInterface $ source, MigrationInterface $ migrate) {
$raw_data = (объект) $row->getSource()['raw'];
// Здесь база данных запрашивает по мере необходимости.
// $uid = \Drupal::database()->выбрать ...
// $profile_id = \Drupal::database()->выбрать ...
$row->setSourceProperty('uid', $uid);
$row->setSourceProperty('profile_id', $profile_id);
}
Обратите внимание, что Миграция плюс предоставляет объектно-ориентированную альтернативу этим хукам: 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. Напишите свой собственный плагин процесса
На drupal.org есть хорошая документация о том, как написать плагин процесса: https://www.drupal.org/docs/8/api/migrate-api/migrate-process/writing-a-process-plugin
В основном это выглядит так:
<?php
пространство имен Drupal\my_module\Plugin\migrate\process;
используйте Drupal\migrate\ProcessPluginBase;
используйте Drupal\migrate\MigrateExecutableInterface;
используйте Drupal\migrate\Row;
/**
* Предоставляет подключаемый модуль процесса миграции «ExtractProfileIdFromLau».
*
* @MigrateProcessPlugin(
* id = "extract_profile_id_from_lau"
* )
*/
класс ExtractProfileIdFromLau расширяет ProcessPluginBase {
/**
* {@inheritdoc}
*/
общедоступная функция преобразования ($ значение, MigrateExecutableInterface $ migrate_executable, строка $ строка, $ destination_property) {
// Получить идентификатор профиля.
$profile_id = \Drupal::database()->выберите ...
вернуть $profile_id;
}
}
И на него можно ссылаться в файле migration.yml в разделе процесс
раздел, что-то вроде этого, например:
процесс:
id_профиля:
-
плагин: extract_profile_id_from_lau
источник: лау
Не совсем уверен, какой способ подойдет вам лучше всего, но это две идеи, которые приходят на ум. По крайней мере, я бы так попробовал.