First you need the prepare row functions in your custom module
getSourceProperty('field_link_details'); $value_new = []; if ($values) { foreach ($values as $value) { $value_new[] = ['item_id' => $value['value']]; } $row->setSourceProperty('field_link_details', $value_new); } } function fieldcollection_paragraphs_migration_migrate_upgrade_d7_node_notices_prepare_row(Row $row, MigrateSourceInterface $source, MigrationInterface $migration) { $values = $row->getSourceProperty('field_link_details'); $value_new = []; if ($values) { foreach ($values as $value) { $value_new[] = ['item_id' => $value['value']]; } $row->setSourceProperty('field_link_details', $value_new); } } function fieldcollection_paragraphs_migration_migrate_investor_alert_to_D8_prepare_row(Row $row, MigrateSourceInterface $source, MigrationInterface $migration) { $values = $row->getSourceProperty('field_link_details'); $value_new = []; if ($values) { foreach ($values as $value) { $value_new[] = ['item_id' => $value['value']]; } $row->setSourceProperty('field_link_details', $value_new); } } function fieldcollection_paragraphs_migration_migrate_speech_to_D8_prepare_row(Row $row, MigrateSourceInterface $source, MigrationInterface $migration) { $values = $row->getSourceProperty('field_link_details'); $value_new = []; if ($values) { foreach ($values as $value) { $value_new[] = ['item_id' => $value['value']]; } $row->setSourceProperty('field_link_details', $value_new); } } function fieldcollection_paragraphs_migration_migrate_industry_to_D8_prepare_row(Row $row, MigrateSourceInterface $source, MigrationInterface $migration) { $values = $row->getSourceProperty('field_link_details'); $value_new = []; if ($values) { foreach ($values as $value) { $value_new[] = ['item_id' => $value['value']]; } $row->setSourceProperty('field_link_details', $value_new); } } function fieldcollection_paragraphs_migration_investor_to_D8_prepare_row(Row $row, MigrateSourceInterface $source, MigrationInterface $migration) { $values = $row->getSourceProperty('field_link_details'); $value_new = []; if ($values) { foreach ($values as $value) { $value_new[] = ['item_id' => $value['value']]; } $row->setSourceProperty('field_link_details', $value_new); } }then you have the migration from field collections to paragraphs (this just migrates into paragraphs but doesn't attach them to any of your nodes yet (they haven't even been created yet)langcode: en status: true dependencies: { } id: d7_field_collection_link_details class: null field_plugin_method: null cck_plugin_method: null migration_tags: - 'Drupal 7' migration_group: migrate_drupal_7 label: Related Link Details source: plugin: d7_field_collection_item key: d7finnrra # field_name is used in our custom plugin to get data about this field_collection_item. field_name: field_link_details process: field_link_list_url: plugin: iterator source: field_link_list_url process: value: value revision_id: revision_id field_link_list_teaser: plugin: iterator source: field_link_list_teaser process: value: value revision_id: revision_id field_internal_content_link: plugin: iterator source: field_internal_content_link process: uri: value revision_id: revision_id destination: plugin: 'entity_reference_revisions:paragraph' default_bundle: field_link_details migration_dependencies: required: { } optional: { }and now finally you have the node migration referencing in the paragraphs from the previous migration using migration_lookup
source: plugin: d7_node node_type: investor_alert key: d7finnrra constants: uid_root: 1 node_article: 'article' destination: plugin: entity:node default_bundle: article process: # Hardcode the destination node type (bundle) as 'migrate_example_beer'. id: nid type: plugin: default_value default_value: article title: title body: plugin: iterator source: body process: value: value format: full_html field_core_short_title_tx: plugin: get source: field_core_short_title_tx field_core_pnumber_tx: plugin: get source: field_core_pnumber_tx field_core_cert_cycle_tax: plugin: sub_process source: field_core_cert_cycle_tax process: target_id: tid field_core_cert_group_tax: plugin: sub_process source: field_core_cert_group_tax process: target_id: tid field_core_cert_due_dt: plugin: iterator source: field_core_cert_due_dt process: value: plugin: substr source: value start: 0 length: 10 field_core_content_type_tax: plugin: sub_process source: field_core_content_type_tax process: target_id: tid field_core_audience_tax: plugin: sub_process source: field_core_audience_tax process: target_id: tid field_core_invest_veh_tax: plugin: sub_process source: field_core_invest_veh_tax process: target_id: tid field_core_rule_reg_tax: plugin: sub_process source: field_core_rule_reg_tax process: target_id: tid field_core_account_type_tax: plugin: sub_process source: field_core_account_type_tax process: target_id: tid field_core_invest_issue_tax: plugin: sub_process source: field_core_invest_issue_tax process: target_id: tid field_core_action_tax: plugin: sub_process source: field_core_action_tax process: target_id: tid field_core_mbr_misconduct_tax: plugin: sub_process source: field_core_mbr_misconduct_tax process: target_id: tid field_core_executive_tax: plugin: sub_process source: field_core_executive_tax process: target_id: tid field_core_business_tax: plugin: sub_process source: field_core_business_tax process: target_id: tid field_core_related_rule_tax: plugin: sub_process source: field_core_related_rule_tax process: target_id: tid field_core_desktop_image: plugin: sub_process source: field_core_desktop_image process: target_id: fid alt: alt title: title width: width height: height field_core_official_dt: plugin: iterator source: field_core_official_dt process: value: plugin: substr source: value start: 0 length: 10 field_invstr_alrt_ctgry_tax: plugin: sub_process source: field_invstr_alrt_ctgry_tax process: target_id: tid field_invstr_alrt_official_dt: plugin: iterator source: field_invstr_alrt_official_dt process: value: plugin: substr source: value start: 0 length: 10 field_invstr_alrt_keywords_tx: plugin: get source: field_invstr_alrt_keywords_tx field_link_details: - plugin: skip_on_empty method: process source: field_link_details - plugin: migration_lookup migration: d7_field_collection_link_details no_stub: true - plugin: iterator process: target_id: '0' target_revision_id: '1' field_core_keywords: plugin: get source: field_core_keywords uid: plugin: default_value default_value: 1 sticky: plugin: default_value default_value: 0 'body/value': content 'body/format': plugin: default_value default_value: full_html migration_dependencies: required: - field_collection_to_paragraph