Как полностью удалить поле в 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.

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

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

Июль 12, 2024 г.

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

Читать

Не появляется форма переиндексации на странице /admin/config/search/search-api/index/

Июль 25, 2024 г.

Если ваш view базируется на search API источнике данных, то важно, чтобы данные были проиндексированы. Но иногда форма переиндексации отсутствует на странице ...

Читать

Управление размерами autocomplete ui widget в Drupal

Октябрь 25, 2023 г.

Попался мне UI баг, когда autocomplete слой с результатами поиска оказывался больше по ширине, чем input элемент, к которому он был прикреплен. Не ясен был алгоритм, по которому вычислялась ширина слоя. В одних случаях это происходило корректно, ...

Читать

Получить код оригинального языка сущности в Drupal

Октябрь 18, 2023 г.

Сущность возвращает язык в контексте выбранного языка, но иногда нужно получить оригинальный язык node или другой entity. Вот так выглядит запрос в контексте: [crayon-6949d31fa0845174605193/] А так можно получить код языка оригинальной версии ...

Читать
 

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

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



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