Как полностью удалить поле в Drupal, если оно «зависло» в хранилище полей

Иногда в Drupal возникает ситуация: вы удаляете поле с типов сущностей (bundle), но оно не исчезает полностью из системы. UI говорит, что поле «используется», хотя на самом деле ни одна сущность его не использует. В этом случае поле остаётся в конфигурации как FieldStorageConfig.

Разберёмся, как удалить такое «висящее» поле.

Почему Drupal не удаляет поле полностью

В Drupal каждое поле состоит из двух частей, например field_content:

  1. FieldStorageConfig — «хранилище» поля:
    • Определяет тип поля, имя (field_content), базовые таблицы (node__field_content, node_revision__field_content).
    • Существует только одно на весь Drupal для данного типа сущности и имени поля.
  2. FieldConfig — привязка поля к конкретному типу сущности (bundle):
    • Например, node.article.field_content или node.page.field_content.
    • Если поле используется на нескольких bundle, каждая привязка хранится отдельно.

Логика удаления:

  • При удалении поля через UI или код удаляется FieldConfig (привязка к bundle).
  • FieldStorageConfig удаляется только тогда, когда ни одна привязка больше не существует.
  • Если конфигурация field.storage.* осталась, Drupal считает, что поле ещё может использоваться и блокирует полное удаление.

Как узнать, есть ли привязки к полю

После экспорта конфигурации (drush cex) можно выполнить поиск по имени поля в директории с файлами конфигурации.

Если имя встречается только в одном файле — field.storage.node.field_content.yml, то есть в самой конфигурации поля, то значит, что поле не используется сущностями, можно его удалить.

Но Drupal иногда не делает этого, и тогда приходится выполняться операцию вручную.

Как удалить «висящее» поле полностью

Нужно выполнить php код:

Это можно сделать прямо из консоли через drush, главное корректно экранировать спец. символы:

После этого:

  • Таблицы node__field_content и node_revision__field_content будут удалены автоматически.
  • Поле полностью исчезнет из конфигурации Drupal.

Мало букафф? Читайте есчо !

Используем токены для доступа к полям параграфов в Drupal

Май 2, 2024 г.

Пара примеров о том, как вытащить нужную инфу из параграфов, используя токены. Обычно это нужно для генерации meta заголовков страницы. У вас есть node, в которой вы создали поле field_myfield с entity_reference: paragrpahs. Самое простое, ...

Читать

Вытаскиваем токен URL картинки из медиа entity

Июль 12, 2024 г.

Медиа entity удобна для использования, но если это единственное поле изображения в статье, то как вытащить URL картинки, например чтобы заполнить шаблоны metatag? К примеру, в вашей статье есть медиа поле - field_image, и настройки разрешают подключать ...

Читать

XML карта сайта для многоязычных проектов на Drupal

Апрель 16, 2024 г.

Для начала разберемся: что мы пытаемся построить. Ожидается, что у нас есть корневой файл sitemap.xml, который содержит список языковых xml карт. ...

Читать

Реализация формы поиска товаров

Май 11, 2023 г.

См. основной материал для введения. Форма в нашем случае не требует отправки/проверки данных, и реализует только два метода - getFormId и buildForm. Хотя форма и не содержит кнопки submit, но все равно будет реагировать на отправку данных, поэтому ...

Читать
 

Комментарии к «Как полностью удалить поле в Drupal, если оно «зависло» в хранилище полей»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: