หากฉันเข้าใจคำถามของคุณถูกต้องและมันเป็นข้อบกพร่องจริงๆ (ดังนั้นจึงไม่มีวิธีแก้ไขปัญหาของคุณอย่างเหมาะสม) ฉันสามารถคิดอย่างน้อย 2 วิธีที่คุณสามารถแก้ไขปัญหานี้ได้
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()
*/
ฟังก์ชัน my_module_migrate_MIGRATE_ID_prepare_row (แถว $row, MigrateSourceInterface $source, MigrationInterface $migration) {
$raw_data = (วัตถุ) $row->getSource()['raw'];
// ที่นี่แบบสอบถามฐานข้อมูลตามต้องการ
// $uid = \Drupal::database()->เลือก ...
// $profile_id = \Drupal::database()->เลือก ...
$row->setSourceProperty('uid', $uid);
$row->setSourceProperty('profile_id', $profile_id);
}
โปรดทราบว่า โยกย้ายพลัส ให้ทางเลือกเชิงวัตถุแก่ hooks เหล่านั้น: 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}
*/
การแปลงฟังก์ชันสาธารณะ ($value, MigrateExecutableInterface $migrate_executable, แถว $row, $destination_property) {
// ดึงรหัสโปรไฟล์
$profile_id = \Drupal::database()->เลือก ...
ส่งคืน $profile_id;
}
}
และสามารถอ้างอิงได้ในไฟล์ migration.yml ใต้ส่วน กระบวนการ
ส่วนบางอย่างเช่นนี้:
กระบวนการ:
profile_id:
-
ปลั๊กอิน: extract_profile_id_from_lau
ที่มา: lau
ไม่แน่ใจว่าวิธีใดจะดีที่สุดสำหรับคุณ แต่นั่นคือ 2 แนวคิดที่จะนึกถึง อย่างน้อยนั่นเป็นวิธีที่ฉันจะลอง