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

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

Использование entityqueue для сортировки элементов во view, основанной на Search API datasource

Апрель 3, 2024 г.

Ранее подход, который я опишу, использовался для nodequeue, сейчас с заменой плагина фунционалом entityqueue, тоже самое можно применить и для него. Проблема: Создано представление (view), где источник данных - элементы datasource Search API. ...

Читать

Drupal deployment

Май 18, 2023 г.

Шпаргалка по настройке и проведению деплоймента для Drupal (начиная с 8й версии). Деплоймент выполняется с использованием git, drush, composer и configuration management. На сервере должны выполняться команды в следующей последовательности: ...

Читать

Ошибка в Drupal Adding non-existent permissions to a role is not allowed. The incorrect permissions are "..."

Июль 25, 2023 г.

Такое иногда вылазит как следствие удаления кастомных классов/модулей, создающих собственные права или инициализирующие права через родительский модуль. Как это пофиксить? Права из роли не были удалены штатно, потому придется сделать следующее: ...

Читать

Обновить path alias в таксономии

Октябрь 24, 2024 г.

Пример кода работы с entityQuery и Entity API. В данном примере мы пройдемся по синонимам терминов таксономии и произведем простую замену или создадим новый синоним согласно установленному в системе шаблону. В 8ке синонимы (path_alias) - это ...

Читать
 

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

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



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