Я пишу миграции для импорта исходных данных в виде абзацев.
Это основная миграция (которая работает).
идентификатор: resource_chapter_section_text
метка: импортировать содержимое из столбца resource.body в исходной базе данных в виде абзацев Chapter_section_text.
миграция_группа: redacted_web
источник:
плагин: resource_chapter_section_text
ключ: migrate_web
процесс:
# настоящее значение будет размещено здесь при миграции resource_chapter_section_text_content
# мы должны сделать это во втором проходе, чтобы избежать создания циклической зависимости
поле_текст/значение:
плагин: default_value
default_value: 'заполнитель'
поле_текст/формат:
плагин: default_value
default_value: 'обычный_текст'
пункт назначения:
плагин: entity_reference_revisions:абзац
default_bundle: глава_раздел_текст
зависимости:
принудительно:
модуль:
- redacted_migration
Обратите внимание, что поле_текст
заполняется значением-заполнителем. Это связано с тем, что исходные данные для этого поля необходимо преобразовать определенным образом, прежде чем я смогу их импортировать. Чтобы избежать циклической зависимости, это преобразование должно быть сделано после всех глава_раздел_текст
абзацы были импортированы.
Итак, я пытаюсь написать вторую миграцию, которая будет выполнять второй проход по той же исходной таблице и обновлять абзацы, созданные первой миграцией. Это и есть миграция.
идентификатор: resource_chapter_section_text_content
label: преобразует содержимое абзацев resource_chapter_section_text из псевдо-Markdown в HTML и обновляет URL-адреса ссылок.
миграция_группа: redacted_web
источник:
плагин: resource_chapter_section_text_content
ключ: migrate_web
процесс:
я бы:
плагин: migration_lookup
миграция: resource_chapter_section_text
источник: section_id
поле_текст/значение: content_converted
поле_текст/формат:
плагин: default_value
default_value: 'полный_html'
пункт назначения:
плагин: entity_reference_revisions:абзац
default_bundle: глава_раздел_текст
перезаписать_свойства:
- поле_текст/значение
- поле_текст/формат
миграция_зависимости:
обязательный:
- resource_chapter_section_text
- collection_term
- документ_узел
- тема
- ресурс
зависимости:
принудительно:
модуль:
- redacted_migration
Как видите, я указываю идентификатор существующего абзаца и использую назначение.overwrite_properties
указать поля, которые необходимо обновить.
Я успешно использовал ту же технику в другой миграции для обновления существующих узлов. Однако здесь это не работает. Вместо этого Migrate пытается создать новые абзацы. Я получаю эту ошибку:
[ошибка] Drupal\Core\Database\IntegrityConstraintViolationException: SQLSTATE [23000]: нарушение ограничения целостности: 1062
Дублирующаяся запись '3829' для ключа 'PRIMARY': ВСТАВИТЬ В "paragraphs_item" ("id", "revision_id", "type", "uuid", "langcode") VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3 , :db_insert_placeholder_4);
Можно ли сделать это с объектами абзаца?