Score:0

Using root source property within migrate sub_process plugin

ธง gb

I'm performing migration from Drupal 9 into another Drupal 9 project. Let's say "content features" migration.

In a node migration I'm trying to create stubs for media items.

The media source has two id keys: mid, langcode. The mid key is getting from field's target_id property. But there is no language property on field's level and I'm trying to pass node's language as second id value for the media lookup.

The migrate_lookup plugin tries to find media entity by mid and langcode properties: MigrationLookup::transform():

if (isset($this->configuration['source_ids'][$lookup_migration_id])) {
  $lookup_value = array_values($row->getMultiple($this->configuration['source_ids'][$lookup_migration_id]));
}

then getMultiple() tries to get values from the current iteration.

Does someone know how to pass root row instead of iteration row?

...
process:
  langcode: langcode
  ...

  field_cover_image:
    - plugin: sub_process
      source: field_cover_image
      process:
        lang:
          plugin: default_value
          default_value: 'en'
        target_id:
          plugin: migration_lookup
          source: target_id
          migration: migrate_media_image
          source_ids:
            migrate_media_image:
              - target_id
              - ROOT_ROW_SOURCE_PROPERTY_LANGCODE

I wonder also if it possible to use constants within sub_process and $row->getMultiple()?

An example:

...
      process:
        target_id:
          plugin: migration_lookup
          source: target_id
          migration: migrate_media_image
          source_ids:
            migrate_media_image:
              - target_id
              - constants/default_language
Score:0
ธง gb

ฉันคิดได้จาก กระบวนการย่อย เอกสารประกอบของปลั๊กอิน:

/**
 * คีย์การกำหนดค่าที่มีอยู่:
 * ...
 * - include_source: (ไม่บังคับ) หากเป็น TRUE การกำหนดค่าปลั๊กอินต้นทางทั้งหมด และ
 ค่า * จะถูกคัดลอกลงในแถวการประมวลผลย่อยในคุณสมบัติใหม่ที่ชื่อว่า
 * สำหรับค่าการกำหนดค่า source_key (ดูด้านล่าง) ค่าเริ่มต้นเป็น FALSE
 * - source_key: (ทางเลือก) ถ้า include_source เป็น TRUE นี่
 * เป็นชื่อของคุณสมบัติของแถวที่ประมวลผลย่อยซึ่งจะมี
 * การกำหนดค่าแหล่งที่มาและค่า ละเว้นถ้า include_source คือ
 *     เท็จ. ค่าเริ่มต้นเป็น 'แหล่งที่มา' หากไม่ได้ระบุค่าไว้
 */

และใช้เป็น:

  field_cover_image:
    - ปลั๊กอิน: sub_process
      ที่มา: field_cover_image
      include_source: จริง
      source_key: ราก
      กระบวนการ:
        target_id:
          ปลั๊กอิน: การโยกย้าย_lookup
          ที่มา: target_id
          การย้ายข้อมูล: migrate_media_image
          รหัสแหล่งที่มา:
            โยกย้าย_media_image:
              - target_id
              - root/langcode # <- รับคุณสมบัติจากแถวรูท

และค่าคงที่ของสาเหตุก็จะมีให้เช่นกัน:

โยกย้าย_media_image:
  - target_id
  - รูท/ค่าคงที่/default_language

อีกทางเลือกหนึ่งคือการสร้างคุณสมบัติการวนซ้ำเป็นค่าเริ่มต้น:

  ปลั๊กอิน: sub_process
  ที่มา: field_cover_image
  กระบวนการ:
    หรั่ง:
      ปลั๊กอิน: default_value
      default_value: 'en'

และอ้างถึงเป็นคุณสมบัติปลายทางการวนซ้ำปัจจุบัน @หรั่ง:

    หรั่ง:
      ปลั๊กอิน: default_value
      default_value: 'en'
    target_id:
      ปลั๊กอิน: การโยกย้าย_lookup
      ที่มา: target_id
      รหัสแหล่งที่มา:
        โยกย้าย_media_image:
          - target_id
          - '@หรั่ง'

ประเภทเนื้อหา/สื่อตั้งค่าให้แปลได้ แต่จริง ๆ แล้วมีเพียงภาษาเดียวและฉันสามารถ "ฮาร์ดโค้ด" ได้ แต่ควรใช้ค่าไดนามิกจะดีกว่า

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา