Рейтинг:0

Как обновить существующие абзацы?

флаг vn

Я пишу миграции для импорта исходных данных в виде абзацев.

Это основная миграция (которая работает).

идентификатор: 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);

Можно ли сделать это с объектами абзаца?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.