Puncte:0

Using root source property within migrate sub_process plugin

drapel 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
Puncte:0
drapel gb

Mi-am dat seama din sub_proces documentația pluginului:

/**
 * Chei de configurare disponibile:
 *...
 * - include_source: (opțional) Dacă este TRUE, toate configurațiile plugin-ului sursă și
 * valorile vor fi copiate în rândul sub-procesat într-o nouă proprietate numită
 * pentru valoarea de configurare source_key (vezi mai jos). Setarea implicită este FALSE.
 * - cheie_sursă: (opțional) Dacă include_source este TRUE, aceasta
 * este numele proprietății rândului subprocesat care va conține
 * configurația și valorile sursei. Ignorat dacă include_source este
 *     FALS. Setarea implicită la „sursă” dacă nu este furnizată nicio valoare.
 */

Și l-a folosit ca:

  field_cover_image:
    - plugin: sub_process
      sursa: field_cover_image
      include_source: adevărat
      cheie_sursă: rădăcină
      proces:
        target_id:
          plugin: migration_lookup
          sursa: target_id
          migrare: migrate_media_image
          sursă_ids:
            migrate_media_image:
              - target_id
              - root/langcode # <- obține proprietatea din rândul rădăcină

Și constantele cauzei vor fi, de asemenea, disponibile:

migrate_media_image:
  - target_id
  - root/constants/default_language

O alternativă ar putea fi crearea proprietății de iterație ca valoare implicită:

  plugin: sub_proces
  sursa: field_cover_image
  proces:
    limba:
      plugin: default_value
      default_value: „en”

și referindu-se la aceasta ca proprietate de destinație a iterației curente @lang:

    limba:
      plugin: default_value
      default_value: „en”
    target_id:
      plugin: migration_lookup
      sursa: target_id
      sursă_ids:
        migrate_media_image:
          - target_id
          - „@lang”

Tipurile de conținut/media se pot traduce, dar de fapt există o singură limbă și o pot „coda”, dar este mai bine să folosești valoarea dinamică.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.