Drupal is a registered trademark of Dries Buytaert
cms 2.1.2 Update released for Drupal core (2.1.2)! drupal 11.1.10 Update released for Drupal core (11.1.10)! drupal 10.5.10 Update released for Drupal core (10.5.10)! drupal 10.4.10 Update released for Drupal core (10.4.10)! drupal 11.2.12 Update released for Drupal core (11.2.12)! drupal 11.3.10 Update released for Drupal core (11.3.10)! drupal 10.6.9 Update released for Drupal core (10.6.9)! drupal 10.6.8 Update released for Drupal core (10.6.8)! drupal 11.3.9 Update released for Drupal core (11.3.9)! drupal 11.3.8 Update released for Drupal core (11.3.8)! drupal 11.3.7 Update released for Drupal core (11.3.7)! drupal 11.2.11 Update released for Drupal core (11.2.11)! drupal 10.6.7 Update released for Drupal core (10.6.7)! drupal 10.5.9 Update released for Drupal core (10.5.9)! cms 2.1.1 Update released for Drupal core (2.1.1)! drupal 11.3.6 Update released for Drupal core (11.3.6)! drupal 10.6.6 Update released for Drupal core (10.6.6)! cms 2.1.0 Update released for Drupal core (2.1.0)! linkit 7.0.15 Minor update available for module linkit (7.0.15). views_data_export 8.x-1.10 Minor update available for module views_data_export (8.x-1.10).

This process plugin generates entities that only exist in context of their parent, eg. paragraphs.

The more commonly used entity_generate plugin by the Migrate Plus module does not support generating an entity by passing an array of values, and getting the entity fields from that array. This is mostly useful for generating entities that don't need to be checked for previous existence because they only exist in context of their parent, eg. paragraphs.

Example usage

destination:
  plugin: 'entity:node'
source:
  # assuming we're using a source plugin that lets us define fields like this
  fields:
    -
      faq_items:
        -
          question: Some question
          answer: Some answer
        -
          question: Another question
          answer: Another answer
process:
  field_faqs:
    plugin: child_entity_generate
    source: faq_items
    entity_type: field_collection
    bundle: faq
    values:
      field_faq_question: question
      field_faq_answer/value: answer
    default_values:
      field_faq_answer/format: basic_html

If you want to store the whole value in a destination property instead of providing a mapping,
you can define the destination property name in the 'destination' key:

destination:
  plugin: 'entity:node'
source:
  # assuming we're using a source plugin that lets us define fields like this
  fields:
    -
      questions:
        - Some question
        - Another question
process:
  field_faqs:
    plugin: child_entity_generate
    source: questions
    entity_type: field_collection
    bundle: question
    destination: field_question

If processing needs to happen on the values, you can pass them through the sub_process plugin first:

destination:
  plugin: 'entity:node'
source:
  # assuming we're using a source plugin that lets us define fields like this
  fields:
    -
      faq_items:
        -
          id: 100
          isHighlighted: true
        -
          id: 101
          isHighlighted: false
process:
  field_faqs:
   -
     plugin: sub_process
     source: faq_items
     process:
       entity:
         plugin: migration_lookup
         migration: faqs
         source: id
       isHighlighted: isHighlighted
   -
     plugin: child_entity_generate
     entity_type: field_collection
     bundle: faq
     values:
       field_faq_entity: entity
       field_faq_is_highlighted: isHighlighted

Activity

Total releases
1
First release
May 2026
Latest release
11 hours ago
Release cadence
Stability
100% stable

Releases

Version Type Release date
1.0.3 Stable May 27, 2026