Nếu tôi hiểu chính xác câu hỏi của bạn và đó thực sự là một lỗi (do đó không có giải pháp phù hợp cho vấn đề của bạn), tôi có thể nghĩ ra ít nhất 2 cách để bạn có thể giải quyết vấn đề này.
1. hook_migrate_prepare_row / hook_migrate_MIGRATION_ID_prepare_row
Bạn đã có thể sử dụng hook_migrate_prepare_row hoặc hook_migrate_MIGRATION_ID_prepare_row để xử lý trước dữ liệu nguồn của bạn và tìm nạp uid và id hồ sơ theo cách thủ công, đại loại như sau:
/**
* Triển khai hook_migrate_MIGRATE_ID_prepare_row().
*/
function my_module_migrate_MIGRATE_ID_prepare_row(Hàng $row, MigrateSourceInterface $source, MigrationInterface $migration) {
$raw_data = (đối tượng) $row->getSource()['raw'];
// Ở đây cơ sở dữ liệu truy vấn khi cần thiết.
// $uid = \Drupal::database()->select ...
// $profile_id = \Drupal::database()->select ...
$row->setSourceProperty('uid', $uid);
$row->setSourceProperty('profile_id', $profile_id);
}
Lưu ý rằng Di chuyển cộng cung cấp một giải pháp thay thế hướng đối tượng cho các hook đó: 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. Viết plugin quy trình của riêng bạn
Có tài liệu hay về cách viết plugin quy trình trên drupal.org: https://www.drupal.org/docs/8/api/migrate-api/migrate- process/writing-a- process-plugin
Về cơ bản nó trông như thế này:
<?php
không gian tên Drupal\my_module\Plugin\migrate\ process;
sử dụng Drupal\migrate\ProcessPluginBase;
sử dụng Drupal\migrate\MigrateExecutableInterface;
sử dụng Drupal\di chuyển\Row;
/**
* Cung cấp plugin quy trình di chuyển 'ExtractProfileIdFromLau'.
*
* @MigrateProcessPlugin(
* id = "extract_profile_id_from_lau"
* )
*/
lớp ExtractProfileIdFromLau mở rộng ProcessPluginBase {
/**
* {@inheritdoc}
*/
hàm công khai biến đổi($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
// Lấy id hồ sơ.
$profile_id = \Drupal::database()->select ...
trả về $profile_id;
}
}
Và nó có thể được tham chiếu trong tệp migration.yml của bạn bên dưới tiến trình
phần, một cái gì đó như thế này chẳng hạn:
tiến trình:
hồ sơ_id:
-
plugin: extract_profile_id_from_lau
nguồn: lau
Không chắc chắn cách nào sẽ phù hợp nhất với bạn, nhưng đó là 2 ý tưởng bạn sẽ nghĩ đến. Ít nhất đó là cách tôi sẽ thử nó.